Java集合Collection常用知识点归纳

Java集合Collection常用知识点归纳

关系图解

在这里插入图片描述

一、常用集合分类

  • Collection

    • List 接口 extends Collection< E> :元素按进入先后有序保存,可重复(单列集合)

      • ArrayList 接口实现类 extends AbstractList< E> implements List< E>
        特点: 数组, 随机访问, 没有同步, 线程不安全
      • LinkedList 接口实现类 extends AbstractSequentialList< E> implements List< E>, Deque< E>,
        特点: 链表, 插入删除, 没有同步, 线程不安全
      • Vector 接口实现类 extends AbstractList< E>
        implements List< E>
        特点:数组, 同步, 线程安全
        • Stack 是Vector类的子类 extends Vector< E>
    • Set接口 extends Collection< E> : 元素内部无序,不重复,不能通过索引获取元素值

      • HashSet 接口实现类 extends AbstractSet< E>
        implements Set< E>,
        特点:使用hash表(数组)存储元素

        • LinkedHashSet 接口实现类 extends HashSet< E>
          implements Set< E>,
          特点:链表维护元素的插入次序,有序
      • TreeSet extends AbstractSet< E>
        implements Set
        特点:底层实现为二叉树,元素排好序

    • Map 接口,键值对的集合(双列集合)

      • Hashtable extends Dictionary<K,V>
        implements Map<K,V>,
        特点:接口实现类, 同步, 线程安全

      • HashMap extends AbstractMap<K,V>
        implements Map<K,V>,
        特点:接口实现类 ,没有同步, 线程不安全

        • LinkedHashMap extends HashMap<K,V>
          implements Map<K,V>

          特点: 双向链表和哈希表实现

        • WeakHashMap extends AbstractMap<K,V>
          implements Map<K,V>

        • TreeMap extends AbstractMap<K,V>
          基于 NavigableMap实现红黑树
          红黑树对所有的key进行排序

二、List和Set集合详解:

  • 1.list和set的区别:
    在这里插入图片描述

  • 2. List详解

    • (1)ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素

    ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的

    • (2)LinkedList 底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素

>  LinkedList 底层是基于双向链表实现的,也是实现了 List 接口,
所以也拥有 List 的一些特点(JDK1.7/8 之后取消了循环,修改为双向链表

- (3)Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素

3. Set详解

  • Set 集合特点: 无序,不重复

    • HashSet:
    1. 底层是一个Hash表(元素为链表的数组)
    2. hashCode() 和 equals()
    3. 如何保证hashSet里元素的唯一性
      • 先执行hashCode(), 不同直接添加
      • 如果相同再执行equals() 相同就不添加,不同就直接添加
    4. 线程不安全,多线程
    • LinkedHashSet:
    1. LinkedHashSet底层数据结构采用链表和哈希表共同实现,
    2. 链表保证了元素的顺序与存储顺序一致,有序,哈希表保证了元素的唯一性。
    3. 线程不安全,效率高。
    • TreeSet:
    1. 底层数据结构是红黑树(是一个自平衡的二叉树)
    2. 元素唯一且已经排好序, 多线程,线程不安全
    3. 唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。
    4. 根据构造方法不同,分为自然排序(无参构造)和比较器排序(有参构造),自然排序要求元素必须实现Compareable接口,并重写里面的compareTo()方法,元素通过比较返回的int值来判断排序序列,返回0说明两个对象相同,不需要存储;比较器排需要在TreeSet初始化是时候传入一个实现Comparator接口的比较器对象,或者采用匿名内部类的方式new一个Comparator对象,重写里面的compare()方法;

4. Set 和 List的总结

  1. Set和List都是继承Collection接口, Map不是
  2. List的特点: 有序,可重复,
  3. Set的特点: 无序,不可重复
  4. List和Set的区别:
  • List 查询快,插入删除元素效率低,因为会引起其他元素位置改变,它的遍历可以用迭代器也可以通过for循环遍历下标
  • Set 查询慢,插入删除快(查询移动指针, 插入删除是直接申请的内存空间),插入和删除不会引起元素位置改变,Set只能通过迭代器遍历

5. ArrayList与LinkedList的区别和适用场景

  • Arraylist:

  • 优点: ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。

  • 缺点:因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。

  • LinkedList:

  • 优点: LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,- - LinedList比较占优势。LinkedList 适用于要头尾操作或插入指定位置的场景
    缺点:因为LinkedList要移动指针,所以查询操作性能比较低。

  • 总的来说,链表实现的底层查询慢,增删快,数组实现的底层查询快,增删慢。

  • TreeSet 是二叉树(红黑树的树据结构)实现的,TreeSet中的数据是自动排好序的,不允许放入null值

  • HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束

适用场景分析:HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。为快速查找而设计的Set,我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。

在这里插入图片描述

三、 Map详解

  • .Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。
    (1)
  1. Map 没有继承 Collection 接口, Map 提供 key 到 value 的映射,你可以通过“键”查找“值”。一个 Map 中不能包含相同的 key ,每个 key 只能映射一个 value 。 Map 接口提供 3 种集合的视图, Map 的内容可以被当作一组 key 集合,一组 value 集合,或者一组 key-value 映射。

  2. Map的主要方法:
    在这里插入图片描述

  3. HashMap和HashTable的比较:
    在这里插入图片描述

  4. TreeMap:
    在这里插入图片描述

  5. 小结:

  • HashMap 非线程安全

  • HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。

  • TreeMap:非线程安全基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。

6. 适用场景分析

  • HashMap和HashTable:HashMap去掉了HashTable的contains方法,但是加上了containsValue()和containsKey()方法。HashTable同步的,而HashMap是非同步的,效率上比HashTable要高。HashMap允许空键值,而HashTable不允许。

    • HashMap:适用于Map中插入、删除和定位元素。
    • Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
  • 线程安全集合类与非线程安全集合类

    • LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
    • HashMap是非线程安全的,HashTable是线程安全的;
    • StringBuilder是非线程安全的,StringBuffer是线程安全的。
  • 数据结构

    • ArrayXxx:底层数据结构是数组,查询快,增删慢
    • LinkedXxx:底层数据结构是链表,查询慢,增删快
    • HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
    • TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

最后

Collection的下属知识点非常多,慢慢吸收,时不时回顾看一看,系统的学习比零散的学更有效果。

java集合超详解

java集合之Set与List总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值