ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HashMap和Hashtable和TreeMap

2020-11-08 17:00:56  阅读:141  来源: 互联网

标签:Comparable return HashMap age TreeMap Hashtable key


HashMap和Hashtable区别

  • HashMap的key和value都可以为空值(null),初始化16,初始化容量建议2的倍数,加载因子0.75,扩容为加倍
  • Hashtable的键和值都不可以为null,初始化11,默认加载因子0.75,扩容为加倍再加一
  • Hashtable线程安全,HashMap不是线程安全
  • Hashtable过时了,不要再用,可用ConcurrentHashMap

属性类Properties介绍(学IO时再具体学习)

  • 一个Map集合,继承自Hashtable,key和value都得是String类型
  • 存 setProperty(String key, String value)
  • 取 getProperty(String key)

TreeSet(底层是TreeMap,TreeMap底层是二叉树)无序不可重复,但可排序

  • //源码构造方法
    public TreeSet() {
            this(new TreeMap<E,Object>());
        }
    
  • 对自定义的类型无法排序,若想要排序需要实现Comparable接口,重写compareTo(T o)方法

    Comparable<? super K> k = (Comparable<? super K>) key;
                do {
                    parent = t;
                    cmp = k.compareTo(t.key);
                    if (cmp < 0)
                        t = t.left;
                    else if (cmp > 0)
                        t = t.right;
                    else
                        return t.setValue(value);//相等就会被覆盖,所以是不可重复的
                } while (t != null);
    
  • TreeSet集合中的元素应当实现compareTo方法,equals可以不写

    //写一个Student类,用age来排序,这样是升序的,应该是返回正数就放在后面
    @Override
        public int compareTo(Student o) {
            if (this.age > o.age) {
                return 1;
            } else if (this.age < o.age) {
                return -1;
            } else {
                return 0;
            }
            //也可以写成 return this.age - o.age;
        }
    
  • 也可以直接在构造方法传比较器,这样对象就不需要实现Comparable(java.lang)接口,比较器Comparator(java.util)

    如果比较规则单一不怎么变就用comparable,否则就用Comparator

    public TreeMap(Comparator<? super K> comparator) {
            this.comparator = comparator;
        }
    //匿名内部类
    TreeSet<Student> set1 = new TreeSet<>(new Comparator<Student>() {
        @Override
        public int compare(Student o1, Student o2) {
            return o1.age - o2.age;
        }
    });
    
  • TreeMap采用中序遍历,是自平衡二叉树

Collections集合工具类

  • public static <T> List<T> synchronizedList(List<T> list) //变成线程安全的
    
  • sort(List list)排序,这个方法存储的对象应当实现Comparable接口,也有对应的用Comparator

标签:Comparable,return,HashMap,age,TreeMap,Hashtable,key
来源: https://www.cnblogs.com/zxy-GO/p/13944889.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有