集合框架中HashMap 和HashTable concurrentHash

来源:互联网 发布:苏客会孵化器知乎 编辑:程序博客网 时间:2024/05/16 01:18

1.集合框架:

        Java中集合框架有两大根接口 Map 和collection 类 

       |------ Collection 

|----Queue集合

|---PriorityQueen优先队列的方法,堆的方式

|-----List(有序的collection接口保存重复的对象)

|-----ArrayList、LinkedList 、Vector 主要实现类ArrayList 和LinkedList; Vector类古老的集合类主stack类

|----Set(集合中元素不能重复,自定义类中判断相同的对象必须重写自定类的equals方法和hashcode方法)

HashSet +LinkedhashSet+TreeSet 主要实现类HashSet ;

HashSet底层基于散列实现的有Set集合特性对于自定义的类重写其中的equals方法和hashCode方法(属性值一样hashCode一样Set首先通过HashCode计算对象位置,比较对象中equals方法)

TreeSet的底层基于红黑树的数据结构实现实现的SortSet的接口,只能装入同一类的对象分为自然排序(自定类实现Comparable接口)+定制排序(自定类实现Comparator接口匿名内部类方法)

LinkedHashSet 特性如何通过链表进行地址链接 遍历输出顺序按照元素添加顺序输出。

   |-----Map (键-value存在的映射)

|----HashMap(主要实现类)--类同于HashSet----线程不安全的 ,

|-----Hashtable 线程安全的操作

|----proprtties

        |----TreeMap---类同于Set集合下TreeSet 有自然排序和定制排序实现SortMap接口


2. 理解概念:无序 指的是元素底存储的位置是无序的并不想数组一样开辟地址连续的地址块。

      HashSet(HashMap)有Set集合的特定,总结 Java首先通过hashCode 判断对象存储位置,最后比较对象位置上的equals方法。


3.HashMap Vs Hashtable:

      HashMap与Hashtable实现的Map集合接口,Map集合接口 键值与value 之间的映射,Key实现Set的接口因此Key不能够进行重复,value可以进行重复,遍历采样迭代器方法 map.EntrrSet()的方法,记住在遍历同时不能删除或者增加元素,这样导致抛出 Java.util.concurrentModifycationException()。

区别:

        1.HashMap线程不安全 hashtable线程安全底层都使用sychronized关键字进行封装,因此运算速度HashMap>Hashtable,实际多线程中使用concurrentHashMap(线程通信CAS技术)不采用collections工具箱Collections.synchronizedMap(new hashMap())进行封装。

2.hashMap的key 有null 但是hashtable key不能有NULL值

3.HashMap去掉Hashtable的contains方法,增加了conatinsValue和containsKey方法

4.HashMap默认数组长度16,扩大是2的指数,Hashtable默认数组长度11 增加方式old*2+1.

concurrentHashMap Vs hashtable

  两者都是线程安全的操作 最大区别是两者之间 锁的粒度和锁方式。

hashtable 用的synchronized关键字 使用一种悲观锁的概念,多个线程不能进入到临界区在临界区的外部进行等待锁的释放,concuurentHashMap采用Lock关键积极锁概念 多个线程进入临界区里面 在CAS竞争的方式获取锁(无锁的方法)。

  hashtable锁住整张的hash表,concurentHashMap 字段锁(hash表分为16个字段)在读操作JDK1.5 并发进行,只是锁住的写操作使用重置锁。


4.hashCode 方法和equals方法:

     

     

原创粉丝点击