您的位置:首页 > 其它

HashMap,Hashset,ArrayList,LinkedList集合的区别

2018-01-30 18:48 399 查看
【HashSet】   

        1. HashSet不能够存储相同的元素,元素是否相同的判断:重写元素的equals方法。equals方法和hashCode方法必须兼容,如:equals方法判断的是用户的名字name,那么hashCode的返回的hashcode必须是name。hashcode();

        2. HashSet存储是无序的,保存的顺序与添加的顺序是不一致的,它不是线性结构,而是散列结构,(通过散列表:散列单元指向链表)。因此,HashSet的查询效率相对比较高。

        3. HashSet不是线程安全的,不是线程同步的。这需要自己实现线程同步:Collections.synchronizedCollection(),方法实现。

 

【ArrayList】

         1.  不是线程安全的,不是线程同步的。

         2.ArrayList是通过可变大小的数组实现的,允许null在内的所有元素。

         3.ArrayList中存放顺序和添加顺序是一致的。并且可重复元素。

         4.ArrayList适合通过位子来读取元素。

 

【LinkedList】

         1.不是线程安全的,不是线程同步的。

         2.LinkedList是通过双向循环链表来实现的。

         3.存放顺序和添加顺序是一致的。可添加重复元素。

         4.适合链表头尾操作和插入指定位置元素的操作。

ArrayList和LinkedList之间的数据传递可通过toArray()方法。

 

【HashMap】

          1.非线程安全,不是线程同步。

          2.添加顺序和保存的顺序是不一致的。

          3.必须重写key的equals方法和hashCode方法。

          4.HashMap的实际容量=容量*因子,默认为16*0.75=12.所以考虑到HashMap的添加的效率问题,根据实际情况来设计它的开始的默认的容量。

           的操作方法根据api来查找。

          5.添加的值中是允许有null的值存在的。

 

【Hashtable】

          1.是线程安全的,是线程同步的,在实现线程同步的时候是不需要手动来实现线程同步的。因此相对效率低。

          2.添加的顺序和保存的顺序是不一致的。

          3.添加的值中是不允许有null值存在的。

底层原理

HashMap:HashMap实现了Map接口,底层使用的是Hash算法存储数据。HashMap将数据以键值对的方式存储。
HashSet:HashSet实现了Set接口,底层也是用的是Hash算法存储数据。而且HashSet内部有HashMap类型的成员变量,方法也调用了HashMap的方法,存储的时候只不过值为null.
ArrayList:ArrayList实现了List接口,底层使用的是数组,存储空间上是相邻的,所以查询起来会很方便,效率也会比LinkedList要高
LinkedList:实现了List接口,底层使用的是使用双向链表的形式,存储的数据在空间上很可能不相邻,但是他们都有一个引用连在一起,所以增删起来会很方便
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  集合
相关文章推荐