一、单列集合顶层接口Collection
- Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
方法名称 | 说明 |
public boolean add(E e) |
把给定的对象添加到当前集命中 |
public void clear() |
清空集合中所有的元素 |
public boolean remove(E e) |
把给定的对象在当前集合中删除 |
public boolean contains(object obj) |
判断当前集合中是否包含给定的对象 |
public boolean isEmpty() |
判断当前集合是否为空 |
public int size() |
返回集合中元素的个数/集合的长度 |
- List 系列集合:添加的元素是有序、可重复、有索引
- Set 系列集合:添加的元素是无序、不重复、无索引
二、Collection 的遍历方式
2.1 迭代器遍历
- 迭代器在ava中的类是Iterator,迭代器是集合专用的遍历方式。
- Collection集合获取迭代器
方法名称 | 说明 |
Iterator<E> iterator() |
返回迭代器对象,默认指向当前集合的0索引 |
- Iterator中的常用方法
方法名称 | 说明 |
boolean hasNext() |
判断当前位置是否有元素,有元素返回true,没有元素返回false |
E next() |
获取当前位置的元素,并将迭代器对象移向下一个位置 |
public static void main(String[] args) { //创建集合 Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); coll.add("ddd"); //迭代器遍历 Iterator<String> it = coll.iterator(); while (it.hasNext()) { String str = it.next(); System.out.println(str); } }
- 细节:
- 1.当迭代器遍历完集合时,再强行访问没有元素的位置,会报错
NoSuchElementException
- 2.迭代器遍历完毕,指针不会复位
- 3.循环中只能用一次
next
方法 - 4.迭代器遍历时,不能用集合的方法进行增加或者删除
2.2 增强for遍历
- 增强for的底层就是迭代器,为了简化迭代器的代码书写的
- 它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
- 所有的单列集合和数组才能用增强for进行遍历
public static void main(String[] args) { //创建集合 Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); coll.add("ddd"); System.out.println("----------增强for----------"); for (String s : coll) { System.out.println(s); } }
- 细节
- 修改增强for中的变量,不会改变集合中原本的数据。
2.3 Lambda表达式遍历
- 得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
- 匿名内部类方式
public static void main(String[] args) { //创建集合 Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); coll.add("ddd"); System.out.println("----------匿名内部类方式----------"); coll.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); }
- 底层原理
@Override public void forEach(Consumer<? super E> action) { Objects.requireNonNull(action); final int expectedModCount = modCount; @SuppressWarnings("unchecked") final E[] elementData = (E[]) this.elementData; final int size = this.size; for (int i=0; modCount == expectedModCount && i < size; i++) { action.accept(elementData[i]); } if (modCount != expectedModCount) { throw new ConcurrentModificationException(); } }
forEach
会对集合进行遍历,将得到的集合元素传给accep()
方法,方法内的参数就是集合中的元素
public static void main(String[] args) { //创建集合 Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); coll.add("ddd"); System.out.println("----------Lambda方式----------"); coll.forEach(s-> System.out.println(s)); }
三、List集合的特有方法
- Collection的方法List都继承了
- Lst集合因为有索引,所以多了很多索引操作的方法.
方法名称 | 说明 |
void add(int index,E element) |
在此集合中的位置插入指定的元素 |
E remove(int index) |
删除指定索引处的元素,返回被修改的元素 |
E set(int index,E element) |
修改指定索引处的元素,返回被修改的元素 |
E get(int index) |
返回指定索引处的元素 |