Java 集合

集合的定义

集合是一个存放对象的引用的容器。位于 java.util 包下。

集合和数组的区别(重点)

  1. 数组和集合都是 Java 中的容器
  2. 数组的长度是固定的,集合的长度是可变的
  3. 数组只能存储相同数据类型的数据,这里的数据类型可以是基本数据类型,也可以是引用类型
  4. 集合可以存储不同数据类型的对象的引用(但一般情况下,我们会使用泛型来约定只使用1种数据类型),但不能存储基本数据类型

集合的分类

集合主要分为以下3种:

  1. List 集合
  2. Set 集合
  3. Map 集合

它们之间的继承关系如下

  1. Java 集合的根接口是 Collection,它又继承了迭代接口 Iterable
  2. Lis 接口和 Set 接口继承了 Collection 接口
  3. Map 接口是独立的接口,并没有继承 Collection 接口 (这里是重点,面试可能问的比较多)
  4. List 接口常用的实现类有:ArrayListLinkedListVector
  5. Set 接口常用的实现类有:HashSetLinkedHashSetTreeSet
  6. Map 接口常用的实现类有:HashMapHashTableTreeMap

List集合

List 集合包括 Lis t接口以及 List 接口的所有实现类。List 集合具有以下特点:

  1. 集合中的元素允许重复
  2. 集合中的元素是有顺序的,各元素插入的顺序就是各元素的顺序
  3. 集合中的元素可以通过索引来访问或者设置

List接口常用的实现类有:ArrayListLinkedListVector。它们的区别:

  • ArrayList
    优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程不安全,效率高
  • LinkedList
    优点: 底层数据结构是链表,查询慢,增删快。
    缺点: 线程不安全,效率高
  • Vector
    优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程安全,效率低

Set集合

Set 集合包括 Set 接口以及 Set 接口的所有实现类。Set集合具有以下特点:

  1. 集合中不包含重复元素(你可以重复添加,但只会保留第1个)
  2. 集合中的元素不一定有顺序

Set 接口常用的实现类有:HashSetLinkedHashSetTreeSet

  • HashSet
    底层数据结构是哈希表。(无序,唯一)
    如何来保证元素唯一性?

    1. 依赖两个方法:hashCode()equals()
  • LinkedHashSet
    底层数据结构是链表和哈希表。(FIFO插入有序,唯一)

    1. 由链表保证元素有序
    2. 由哈希表保证元素唯一
  • TreeSet
    底层数据结构是红黑树。(唯一,有序)

    1. 如何保证元素排序的呢?
      自然排序
      比较器排序
    2. 如何保证元素唯一性的呢?
      根据比较的返回值是否是 0 来决定

Map集合

Map 集合包括 Map 接口以及 Map 接口的所有实现类。Map 集合具有以下特点:

  1. Map 接口并没有继承 Collection 接口,提供的是 key 到 value 的映射
  2. Map 中不能包含相同的 key

Map 接口常用的实现类有:HashMapHashTableTreeMap

  • TreeMap 是有序的,HashMapHashTable 是无序的。
  • Hashtable 的方法是同步的,HashMap 的方法不是同步的。这是两者最主要的区别。

內容引用整理自:

发表评论