Map家族
一、HashMap:按key-value对方式存值,它的key是无序的、唯一的单一对象。底层采用数组+链表结构存值(其中链表节点数量超过一定限度(8个),链表会变成树状结构)
①优点:key的唯一性(通过hashCode()和equals()实现的)
②注意:HashMap的key的泛型类中要重写hashCode()和equals()才能实现根据值来实现对key的去重
二、TreeMap:按key-value对方式存值,它的key是无序的、可排序的、唯一的单一对象,底层采用二叉树结构存值
①优点:key可排序的,唯一的
②key的可排序性:通过排序器的排序方法返回负数排在前面(左子节点),返回正数排在后面(右子节点)
③key的唯一性(去重):通过排序器的排序方法返回0,表示key相同,key不存,value覆盖
④注意:TreeMap一定要用排序器,如果是用无参构造创建TreeMap,要求key的泛型所在类实现自然排序器接口(Comparable),重写排序方法(compareTo());如果是用有参构造创建TreeMap,要将自定义排序器(Comparator)对象作为参数传给TreeMap的构造方法,在自定义排序器类中重写排序方法(compare()).
排序器:自然排序器,自定义排序器(比较器排序器)
三、Hashtable:哈希表.线程安全,运行效率慢;不允许null作为key或者是value
四、HashTable VS HashMap
1.相同点:
按key-value对存值,它的key无序的唯一的单一对象,底层都采用数组+链表结构存值
2.不同点:
①推出时间不同:HashTable在jdk1.2之前推出;
HashMap在jdk1.2之后推出;
②线程安全性不同:HashTable在单线程中使用效率低,在多线程中使用安全;
HashMap在单线程中使用效率高,在多线程中使用不安全;
③是否能存null:HashTable的key和value都不可以存null;
HashMap的key和value都可以存null;
④初值和扩容不同:HashTable默认初始容量为11,按2倍+1扩容;
HashMap默认初始容量为16,按2倍扩容;
⑤方法不同:HashTable拥有HashMap所有方法,且还拥有自己独有的方法。
五、Properties:继承自HashTable,按key-value对的方式存值,核心作用是可以通过流来动态加载配置文件