Java中的集合类

一. 介绍

  在Java中,集合是一种用于存储和操作多个元素的容器。它更方便地操作和管理一组对象,集合类提供了比传统的数组更强大和灵活的功能,可以动态地添加、删除和查找元素,以及进行排序、过滤等操作。集合类有一个共同特点,就是它们只容纳对象,如果想在集合中使用基本类型数据,可以使用其对应的包装类。

 

  集合有两大接口:

    Collection:单列集合接口,它是所有单列集合类的根接口。它定义了处理集合中元素的基本操作,比如添加、删除、查询、遍历等。Collection接口的常见实现类包括List、Set和Queue等。

    Map:双列集合接口,Map接口代表键值对的映射关系。它存储了一组键值对的数据,其中每个键都是唯一的。通过键可以快速地访问对应的值。Map接口的常见实现类包括HashMap、TreeMap和LinkedHashMap等。

 

  简略集合架构图:

 

 

 

 二. 常用的集合类

  Collection:

    ArrayList<E>:使用数组实现的动态数组。它可以动态地增加或减少其大小以容纳任意数量的元素。

    LinkedList<E>:使用链表数据结构来存储元素。与ArrayList相比,LinkedList在插入和删除元素时具有更好的性能,但在访问和查找元素时稍慢。

    HashSet<E> :使用哈希表作为其底层数据结构。它存储不重复的元素,不保证元素的顺序。

    TreeSet<E>:使用红黑树的数据结构来存储元素。在TreeSet中,每个元素都必须是可比较的,因为它们会按照自然排序或者通过自定义比较器进行排序。

  Map:

    HashMap<K,V>:使用数组+链表+红黑树的结构,HashMap 在插入、删除和查找元素时都能够以 O(1) 的平均时间复杂度进行操作,具有高效性能。

    TreeMap<K,V>:使用红黑树,TreeMap实现了有序的键值对存储和检索。它提供了基于键的排序功能,可以使用自然排序或者自定义比较器进行排序。这使得TreeMap在需要按照键的顺序遍历或查找操作时非常高效。

    ConcurrentHashMap<K,V>:使用数组+链表+红黑树的组合实现的。它利用了分段锁(Segment)的机制来提供并发安全性。在内部,ConcurrentHashMap将数据分割成一系列的段,每个段都持有一个锁。不同的线程可以同时访问不同的段,并发操作不会产生冲突。

 

三. 选用合适的集合

  ArrayList:用于需要频繁插入、删除或遍历元素的场景。它实现了可变大小的数组。

  LinkedList:用于需要频繁进行插入、删除操作,但不要求随机访问元素的场景。它基于链表数据结构。

  HashSet:用于存储唯一性元素,并且不保证顺序。它基于哈希表实现,提供快速的插入、删除和查找操作。

  TreeSet:用于存储有序的唯一性元素。它基于红黑树实现,对插入、删除、查找等操作都提供了较高的性能。

  HashMap:用于存储键值对,并且不保证顺序。它基于哈希表实现,提供了快速的插入、删除和查找操作。

  TreeMap:用于存储有序的键值对。它基于红黑树实现,对插入、删除、查找等操作都提供了较高的性能。

  ConcurrentHashMap:用于用于存储有序的键值对,多线程安全场景,不同的线程可以同时访问不同的段,并发操作不会产生冲突。

 

四. 集合接口类方法

  Collection

    集合中的根接口。集合表示一组对象,其对象称之为元素。有些集合允许重复元素,而有些则不允许。有些事有序的,有些是无序的。JDK不提供该接口的任何直接实现,它提供了更具体的子接口的实现。如<Set> 和 <List> 。 该接口通常用于传递集合;

    <E> 这个集合中元素的类型;

      

  Map<K,V>

    Map接口提供了三种视角,将映射的内容视为一组键、一组值、一组键值。Map不能包含重复的键;每个键最多只能映射到一个值。

    <K,V> Key 代表 键 , Vaule 代表 值

      

             此处不写具体的方法详解及实现,后续会在对应的子接口中阐述。

   此处待链接

 

  完

 

热门相关:恭喜你被逮捕了   裙上之臣   锦庭娇   富贵不能吟   万古至尊