Collection单列集合
一次只能添加一个数据
顶层接口 Collection
第二层接口是 List和Set集合
List的实现类: ArrayList,LinkedList,Vector(过时)
Set的实现类: HashSet,TreeSet
HashSet的子类: LinkedHashSet
常用方法: boolean add(E e) 添加元素
void clear() 清空所有元素
boolean remove(E e) 把给定对象在当前集合中删除
boolean contains(Object o) 判断当前集合中是否包含给定对象
如果是引用数据类型,那要重写equals和hash方法
boolean isEmpty() 判断当前集合是否为空
int size() 返回当前集合中元素的个数
Set系列集合: 无序,不重复,无索引
无序: 存和取得顺序可能不同
不重复: 集合中不同元素,值不能相同
无索引: 不能用fori遍历
Collection集合遍历方式
迭代器遍历
Iterator<E> iterator() 获取一个迭代器对象
boolean hasNext() 判断当前指向的位置是否有元素
E next() 获取当前指向的元素并移动指针
remove() 迭代器删除,将指针返回一位
Collection<Integer> list=new ArrayList<>();
Iterator<Integer> it=list.iterator();
while (it.hasNext()){//判断下一个存不存在
Integer next = it.next();
System.out.println(next);
}
细节: 如果超出集合范围还调用next方法,会报错NoSuchElementException
迭代器遍历完毕,指针不会复位
循环只能用一次next方法
迭代器遍历时,不能用集合的方法增加或删除
不然会报错:ConcurrentModificationException并发修改异常
迭代器遍历是不依赖索引的
增强for遍历
底层就是迭代器,为简化迭代器书写而出现
jdk5后出现的
所有单列集合和数字才能用它
for (Integer s : list) {
sout(s);
}
Lambda表达式遍历
list.forEach(s->sout(s));