ListIterator集合迭代器

ListIterator集合迭代器

JAVA集合迭代器接口是 list集合迭代器_JAVA集合迭代器接口是

00 Iterator

迭代器,它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合的顶层接口)所以除了 map 系列的集合,我们都能通过迭代器来对集合中的元素进行遍历。

01 Collection

List接口和Set接口的父接口,同时还是Iterator的子类,继承了Iterator。

02 List:有序可重复的集合

A . ArrayList()

特性:底层是Object数组可自动扩充机制,ArrayList.EnsureCapacity(int minCapacity),其扩充策略是如果原来的小于了传入的即old<min,则按(old*3)/2 + 1<原来的1.5倍加1>与min进行比较,取最大的那个,查询快、增删慢;现场不安全,效率高,轻量级。

B . Vector()

底层也是数据结构的数组,查询快,增删慢,使用少,线程安全,重量级的。几乎已经淘汰了这个集合。

C . LinkedList()

底层是双向循环链表,分为前指针、数据、后指针,后指针指向前指针形成循环结构,用于实现栈、队列等。查询慢,增删快。线程不安全效率高

03 Set:典型实现HashSet()是一个无序,不可重复的集合

A . HashSet

  • 不能保证元素的顺序;不可重复;不是线程安全的;集合元素可以为 NULL;
  • 其底层其实是一个数组,存在的意义是加快查询速度。在一般的数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,因此,在数组中查找特定的值时,需要把查找值和一系列的元素进行比较,此时的查询效率依赖于查找过程中比较的次数。而 HashSet 集合底层数组的索引和值有一个确定的关系:index=hash(value),那么只需要调用这个公式,就能快速的找到元素或者索引。
  • 对于 HashSet: 如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。每一个存储到 哈希 表中的对象,都得提供 hashCode() 和 equals() 方法的实现,用来判断是否是同一个对象。重写时也得两个一起重写。

B . LinkedHashSet

  • 不可重复,有序的。 因为底层采用 链表 和 哈希表的算法。链表保证元素的添加顺序,哈希表保证元素的唯一性。

C . TreeSet

  • 有序;不可重复,底层使用 红黑树算法,擅长于范围查询。
  • 如果使用 TreeSet() 无参数的构造器创建一个 TreeSet 对象, 则要求放入其中的元素的类必须实现 Comparable 接口所以, 在其中不能放入 null 元素.
  • 自动排序:添加自定义对象的时候,必须要实现 Comparable 接口,并要覆盖 compareTo(Object obj) 方法来自定义比较规则,两个对象通过 Comparable 接口 compareTo(Object obj) 方法的返回值来比较大小, 并进行升序排列
  • 如果 this > obj,返回正数 1
  • 如果 this < obj,返回负数 -1
  • 如果 this = obj,返回 0 ,则认为这两个对象相等
  • 定制排序: 创建 TreeSet 对象时, 传入 Comparator 接口的实现类. 要求: Comparator 接口的 compare 方法的返回值和 两个元素的 equals() 方法具有一致的返回值

比较:HashSet:不保证元素的添加顺序,底层采用 哈希表算法,查询效率高。判断两个元素是否相等,equals() 方法返回 true,hashCode() 值相等。即要求存入 HashSet 中的元素要覆盖 equals() 方法和 hashCode()方法 TreeSet:不保证元素的添加顺序,但是会对集合中的元素进行排序。底层采用 红-黑 树算法(树结构比较适合范围查询)

04 Map:键值对,键不允许重复,值可以重复

  • 1、严格来说 Map 并不是一个集合,而是两个集合之间 的映射关系。
  • 2、这两个集合没每一条数据通过映射关系,我们可以看成是一条数据。即 Entry(key,value)。Map 可以看成是由多个 Entry 组成。
  • 3、因为 Map 集合即没有实现于 Collection 接口,也没有实现 Iterable 接口,所以不能对 Map 集合进行 for-each 遍历。

A . HashMap(常用)

  • key不重复,value可重复;key的实现就是hashSet;
  • 允许null的键或值。最多只允许一条记录的键为Null;多条值为Null。
  • 不支持同步,但可以多个线程同时写,可能数据会不一致,可以通过collections的synchronizedMap方法使HashMap有同步的能力

B . Hashtable

  • 线程安全,不允许Null的键或值

C . TreeMap

  • 对key排序的Map,key就是TreeSet。

D . Linked Hash Map

  • 与HashMap不同的是其维护运行于所有条目的双重连接链表,存储有序。

05 Map和Set的关系

  1. 都有几个类型的集合。HashMap 和 HashSet ,都采 哈希表算法;TreeMap 和 TreeSet 都采用 红-黑树算法;LinkedHashMap 和 LinkedHashSet 都采用 哈希表算法和红-黑树算法。
  2. 分析 Set 的底层源码,我们可以看到,Set 集合 就是 由 Map 集合的 Key 组成。