……

java中的集合类结构

集合结构

List、Set和Map:

       List是有序的集合,Set是无序的集合。Map是无序的键值对。

HashMap详解:

        HashMap有两个参数影响其性能:初始容量和加载因子。默认初始容量是16,加载因子是0.75。容量是哈希表中桶(Entry数组)的数量,初始容量只是哈希表在创建时的容量。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,通过调用 rehash 方法将容量翻倍。

ArrayList和Vector对比:

       都是List的实现类。他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素
       Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码

ArrayList和LinkedList对比:

       1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
       2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
       3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

HashSet和TreeSet对比:

       HashSet比TreeSet的性能要好,因为TreeSet需要额外的红黑树算法来维护集合的次序。所以只有当需要保持排序的Set时候,才会使用TreeSet,否则都应该使用HashSet。

HashSet和HashMap对比:

       都是采用Hash算法来决定元素的存储位置,并通过hash算法来增加集合大小的。其中最大的区别就是,HashSet实现的Set接口,他不允许有重复的值。HashMap实现的是Map接口,里面存储的是键值对,map中不允许存在重复的key。

HashMap和HashTable对比:

       HashTable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比HashTable的性能高一些;但是如果有多个线程访问同一个Map对象时候,应该使用HashTable。
       HashTable不允许使用null作为key和value,如果视图把null值放入HashTable中会引发NullPointerException异常,但是HashMap可以使用null作为key或value。null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。

各集合对比:

集合对比

小结

       参考了很多资料,整理了一下各种集合之间的对比。在使用的过程中,还需要结合自己的实际业务来进行选择。

 
 posted on 2020-10-12 14:06  大码王  阅读(132)  评论(0编辑  收藏  举报
复制代码