集合概述

集合概述

1 数组和集合区别

集合概述_第1张图片

2. 集合常见的方法

集合概述_第2张图片

3. 常用集合分类

3.1 Collection接口下的

  • List接口
    • LinkList:链表, 插入删除, 没有同步, 线程不安全
    • ArrayList: 数组, 随机访问, 没有同步, 线程不安全
    • Vector:数组, 同步, 线程安全
  • Set接口
    • HashSet:底层数据结构是哈希表(是一个元素为链表的数组)
    • TreeSet:底层数据结构是红黑树(是一个自平衡的二叉树)
    • LinkedHashSet:底层数据结构由哈希表和链表组成。

3.2 Map接口下的

  • HashTable:同步, 线程安全
  • HashMap:没有同步, 线程不安全-
  • TreeMap:红黑树对所有的key进行排序
  • IdentifyHashMap

4. List和set的区别

  • 重复元素:list可以允许重复元素,set不允许
  • 有序性:list是一个有序的容器,保持了每个元素的插入顺序。即输出顺序就是输入顺序,而set方法是无序容器,无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序
  • null元素:list可以插入多个null元素,而set只允许插入一个null元素

5. 迭代器(Iterator)

Collection的源码中继承了Iterable,有iterator()这个方法

集合概述_第3张图片

Iterable是一个接口,它有iterator()这个方法,返回的是Iterator

Iterator也是一个接口,它只有四个方法:

  • hasNext()
  • next()
  • remove()
  • forEachRemaining()

集合概述_第4张图片

在ArrayList内部首先是定义一个内部类Itr,该内部类实现Iterator接口,如下:
在这里插入图片描述

而ArrayList的iterator()方法实现

public Iterator<E> iterator() {
     
    return new Itr();
}

Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素。

ArrayList<String> arrayList = new ArrayList<>();
Iterator<String> iterator = arrayList.iterator();

Iterator的意义

遍历ArrayList 和Linklist是十分容易的,遍历Tree容器也不难,但是实现机制是完全不同,而遍历Set容器就无从下手了。 所以Java设计了Iterator 这个接口,分别让各种容器自己去重写里面的hasNext()和next()方法。不用关心各种容器的遍历机制,只要使用Iterator,会让人觉得各种容器的遍历方法都是一样的,这就是Java接口的重要意义。

几个遍历的比较

  • for一般可以用于简单的顺序集合,并且可以预测集合的大小;
  • foreach可以遍历任何集合或者数组,但是使用者需要知道遍历元素的类型。
  • iterator是最强大的,它可以随之修改元素内部的元素。可以在遍历的时刻用remove()

你可能感兴趣的:(集合,java)