Java常用的集合总结

2020-07-23  本文已影响0人  132xin

在总结集合之前,我们可能还会想起数组,那么数组和集合有什么区别呢?

Collestion和Array的区别:

image.png

接下来重点放在Collection的学习和总结上:

Collection和Map集合的常用分类
image.png
List和Set的区别:
image.png
List的子类:
ArrayList:

底层结构是动态数组,查找速度快,增删速度慢,线程不安全,效率高,可以存重复元素。

LinkedList:

底层结果是链表,查找速度慢,增删速度快,线程不安全,效率高,可以存重复元素。

Vector:

底层结构是动态数组,查找速度快,增删速度慢,线程安全,效率低,可以存重复元素。

通过对方法加上synchronized的关键字实现线程安全,效率因此也比较低。

在多线程的情况,不能直接使用ArrayList,除了使用Vector之外,还可以同过下面的两种方式实现线程安全,详情可以参考ArrayList的实现原理以及实现线程安全:

  • Collections.synchronizedList(List list)函数返回一个线程安全的ArrayList集合
  • 使用concurrent并发包下的CopyOnWriteArrayList的。

ArrayList和LinkedList的区别和使用场景:

区别:

ArrayList的底层结构是动态数组,使用的内存是连续的,在查找的速度比LinkedList的速度快,但是增删的速度慢。

LinkedList的底层结构是链表,使用的内存是不连续的,在查找的速度比ArrayList慢,但是增删的速度快。

使用场景:

因为ArrayList和LinkedList都是线程不安全的,所以它们不能应用于多线程并发的情况,ArrayList适合在查找比较多的单线程的业务中,LinkedList适合在增删操作比较多的单线程的业务中

set的子类
HashSet

HashSet的底层是通过哈希表实现的,元素唯一且无序,可以存入null,但是只能是一个,线程不安全,效率高,元素的唯一性事通过重写hashCode()和equals()方法来保证元素的唯一的,否则不能实现元素的唯一性。

TreeSet

TreeSet的底层是根据二叉树实现的,元素唯一且有序,不可以放入null的值,唯一性同样需要重写hashCode()和equals()来实现,二叉树的结构保证了元素的有序性。

LinkedHashSet

LinkedHashSet的底层结构是通过链表和哈希表实现的,链表实现元素的顺序跟插入顺序一致,哈希表保证了元素的唯一性

Map集合总结

Map是一种具有映射关系的集合,通过键值对来存储,key和value都可以是任何数据类型,但是key是不能重复的,因此可以通过指定的key来获取Value。

HashMap

HashMap的是线程不安全的,底层结构是数组和链表实现的,key和value可以为null,但是key只能出现一次,不能有重复的key,Value可以出现多次,HashMap的性能是最高的。用作做key的对象必须要重写hashCode()和equals()的方法,不能保证键值对的顺序,尽量不要使用哈希值会变得对象作为key。底层原理实现可参考HashMap的底层结构和实现原理

HashTable

HashTable是线程安全的,HashTable的方法通过Sychronized关键字实现同步,不能存入空的键值对,HashTable的性能是最差的,用作做key的对象必须要重写hashCode()和equals()的方法,不能保证键值对的顺序,尽量不要使用哈希值会变得对象作为key。

TreeMap

TreeMap的底层结构是红黑树,通过红黑树对Key进行排序,排序方式有自然排序和定制排序,TreeMap的key是通过TreeSet的形式存储的,对Key的要求于TreeSet的要求一致。详情可参考TreeMap原理实现及常用方法.

参考链接:
https://blog.csdn.net/feiyanaffection/article/details/81394745

上一篇下一篇

猜你喜欢

热点阅读