1.HashMap的用法
HashMap实现了Map接口,继承AbstractMap,它是基于哈希表的 Map 接口的实现(保证键的唯一性),
以key-value的形式存在
HashMap是引用数据类型
通过 new 关键字在 Heap 堆中申请空间
保存其中元素的空间,按照hash码,预设好一个个的空间
这个空间就是 Hash Bucket(哈希桶)
每个桶有自己的Hash编号
一开始有少量的 Hash Bucket,
当程序试图将一个 key-value(Entry) 放入 HashMap 中时,
程序首先根据该 key 的 hashCode() 返回值决定该 Entry 的Bucket位置,
如果该Bucket为空,直接存放入该Bucket;
如果该Bucket不为空,使用 equals 比较两个Entry 的 Key;
if(true){新 value 将覆盖 Entry 原 value,key 不变}
if(false){新 Entry 将与 Bucket中原 Entry 形成 Entry 链,
而且新 Entry 位于 Entry 链的头部}
Map集合的遍历:
Map集合的遍历:
1、通过内部类Entry进行遍历
2、通过迭代器进行遍历,先获得Entry的Set集合
3、通过keySet方法获得键的Set集合,通过遍历键取值
4、通过map.values()获得所有值,但是不能获得键
2.Hashtable的用法
Hashtable:是Map接口的另外一个实现类,和HashMap用法类似,亦有区别
Hashtable出现于JDK1.0,HashTable基于Dictionary类
HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null
Hashtable的方法是同步的,而HashMap的方法不是同步的。
有人建议,涉及多线程使用时候,就使用Hashtable,没有涉及时候就用HashMap.但是在Collections中有一个静态方法
SynchronizedMap(),该方法创建了一个线程安全的Map对象,并且作为一个封装对象返回。所以通过Collections类中的
SynchronizedMap()的方法,我们是可以同步访问潜在的HashMap的。
3.treeMap用法
TreeMap:基于红黑树(Red-Black tree)的 NavigableMap实现。该映射根据其键的自然顺序进行排序,
或者根据创建映射时提供的 Comparator进行排序,具体取决于使用的构造方法。
TreeMap 是一个有序的key-value集合,它是通过红黑树实现的
TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合
TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法,比如返回有序的key集合
TreeMap 实现了Cloneable接口,意味着它能被克隆
TreeMap 实现了Java.io.Serializable接口,意味着它支持序列化
构造方法:
TreeMap支持排序:
1、TreeMap默认按键的自然顺序升序进行排序
2、TreeMap按降序排列
注意:在进行降序排序时,要在构造集合时候传递一个比较器
HashMap Hashtable treeMap的原理以及区别
1.这三个都对Map接口进行了实现
2.HashMap是不安全的线程,他允许Key值出现一次null Value值出现无数次的Null
3.Hashtable是安全的线程,他不仅实现了Map接口也实现了Dictionary接口,他的key值与Value值都不允许出现Null
4.treeMap是可以进行排序的,默认按照键的自然顺序进行升序排序,若要进行降序排序则需要在构造集合时候传递一个比较器