API && Collection <E> 接口相关集合

Collection

java.util.Collection
在这里插入图片描述
Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素

  • 一些 collection 允许有重复的元素,而另一些则不允许。
  • 一些 collection 是有序的,而另一些则是无序的。
  • JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 SetList)实现。

跟数组的对比

  • 数组:长度确定,类型确定。
    • 类型可以是基本类型、引用类型
  • 集合:长度不固定(最大的优势)
    • 元素类型只能是引用类型。

我如何得到Collection接口的实例呢?
创建一个Collection接口的实现类。比如:ArrayList等

重点:关于集合的遍历,Java专门提供了一种迭代器
用 Iterator iterator() 返回一个用于访问集合中每个元素的迭代器
代码演示:

Iterator iterator = cc.iterator();
while(iterator.hasNext()){
    
    
    System.out.println(iterator.next());
}
//注意:如果hashNext()返回了false的情况下,再继续调用next()
//异常:方法会抛出 `java.util.NoSuchElementException`

迭代器的异常

本质原因:

  • 是使用迭代器进行迭代的过程中,未通过迭代器修改了集合的长度(一般就是插入的新的元素),迭代器并不知道。就会抛出并发修改异常。

解决方案有两种:

  • 用for循环实现。
  • 添加或删除操作必须通过迭代器来进行。
//1. 优先考虑迭代器
// 注意: nextIndex 要在next之前调用。
ListIterator iterator = cc.listIterator();
while (iterator.hasNext()){
    
    
    int i = iterator.nextIndex(); //当前迭代的位置
    Object next = iterator.next();
    Integer n = (Integer)next;
    if(n % 2 ==0){
    
    
        System.out.println(i+"发现了元素:"+n);
        //add
        //                cc.add(i, -1);
        //                cc.remove(i);
        //注意:改变长度的时候,不要直接调用集合的方法,而应该使用迭代器的方法
        iterator.add(-1);
    }
}

方法摘要:

boolean add(E e)
确保此 collection 包含指定的元素(可选操作)
boolean addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
void clear()
移除此 collection 中的所有元素(可选操作)。
boolean contains(Object o)
如果此 collection 包含指定的元素,则返回 true。
boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
boolean equals(Object o)
比较此 collection 与指定对象是否相等。
int hashCode()
返回此 collection 的哈希码值。
boolean isEmpty()
如果此 collection 不包含元素,则返回 true。
Iterator iterator()
返回在此 collection 的元素上进行迭代的迭代器。
boolean remove(Object o)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
boolean retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
int size()
返回此 collection 中的元素数,返回当前存储在集合中的元素个数**
Object[] toArray()
返回包含此 collection 中所有元素的数组。
T[]
toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

int size()

boolean isEmpty()
如果集合中没有元素,返回true

boolean contains(Object obj)
boolean containAll(Collection<? extend E> other)
如果集合中包含相等对象,返回true

boolean add(Object element)
boolean addAll(Collection<? extend E> other)
将一个元素添加到集合中,集合改变返回true

boolean remove(Object element)
boolean removeAll(Collection<?> other)
删除相等元素,成功删除返回true

Iterator

java.util.Iterator

boolean hasNext() 如果存在可访问的元素,返回true

E next() 返回将要访问的下一个对象

void remove() 删除上次访问的元素

Java库中具体集合

ArrayList 一种可以动态增长和缩减的索引序列
LinkedList 一种可以在任何位置进行高效插入和删除操作的有序序列
ArrayDeque 一种用循环数组实现的双端队列
HashSet 一种没有重复元素的无序集合
TreeSet 一种有序集
EnumSet 一种包含枚举类型值的集合
LinkedHashSet 一种可以记住元素插入次序的集
PriorityQueue 一种允许高效删除最小元素的集合
HashMap 一种存储键/值关联的数据结构
TreeMap 一种键值有序排列的映射表
EnumMap 一种键值属于枚举类型的映射表
LinkedHashMap 一种可以记住键/值项添加次序的映射表
WeakHashMap 一种其值无用武之地后可以被垃圾回收期回收的映射表
IdentityHashMap 一种用==而不是用equals比较键值的映射表

常见的数据结构

程序 = 数据结构 +算法;

  • 栈结构: 后进先出。
  • 队列:先进先出。
  • 数组: 特点是检索快,增删慢。
  • 链表:检索慢,增删快。
    • 单向链表
    • 双向链表
    • 循环链表
    • 双向循环链表
    • 二叉树: 最多两个子节点

猜你喜欢

转载自blog.csdn.net/weixin_47371330/article/details/107533344