美文网首页
Java常用的集合总结

Java常用的集合总结

作者: 132xin | 来源:发表于2020-07-23 16:16 被阅读0次

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

    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

    相关文章

      网友评论

          本文标题:Java常用的集合总结

          本文链接:https://www.haomeiwen.com/subject/hmehlktx.html