1. 集合

2. collectio

2.1. removeIf

removeIf()方法底层会遍历集合,得到集合中的每一个元素

如果返回一个true则删除该传入的元素删除

可以使用lambda函数

  1. Collection<String> array = new ArrayList<>();
  2. array.add("aaa");
  3. array.add("bbb");
  4. array.add("cccc");
  5. array.removeIf(
  6. (String s) ->
  7. s.length() == 3
  8. );

3. 迭代器

3.1. iterator()

返回集合中的迭代器对象

  1. Iterator<String> it = list.iterator();

3.2. hasNext()

判断当前位置是否有元素可被取出

有返回true 没有则返回false

3.3. next()

将迭代器对象指向下一个元素,并返回当前元素

  1. while (it.hasNext()){
  2. System.out.println(it.next());
  3. }

4. 增强for循环

所有的(Collection)单列集合都可以使用迭代器或增强for,双列集合无法使用

  1. for(String s : list){
  2. System.out.println(s);
  3. }

5. List

查询数据,数组通过地址值和索引定位元素,查询任意数据耗时相同,查询速度快

删除数据,要将被删数据删除,同时后面个每个数据前移,删除效率低

添加数据,添加位置后的每个数据后移,再添加元素,添加效率极低

6. 单向链表

链表通过每个结点(元素)指向下一个结点的地址值来形成链表,如只有1个结点则该结点的指向地址为空(结束结点)

查询数据,(无论查询是位置还是元素)只能从头结点一直查询到被查结点,查询效率慢

删除数据,只需要修改被删除结点前一个结点的指向地址为被删结点的后一个结点即可.删除效率快

添加数据,添加结点与删除结点类型,只需在添加位置更改前后结点的指向地址即可.添加效率快

7. 双向链表

单向链表每个结点只存储 值和下一个结点的地址.

而双向保留3个数据,分别为,前一个结点的地址 值 下一个结点的地址.这样我们可以从后找到前或从前找到后.查询位置的时候会判断离头结点近还是尾结点近来进行链表查询

8. ArrayList 源码

默认空参构造方法 是创建一个长度为0的数组

当调用add方法会把长度为0的ArrayList初始化为长度为10,并且都为null, 源码方法名为elementData

并且会有一个变量size 标记当前数组元素长度

如果size超出了默认长度10或者当前数组长度,则会自动扩容,扩容为当前数组长度1.5倍的大小,扩容后的数组为空,把原来的数组拷贝到新的数组中,并且size保持不变.

8.1. 遍历ArrayList

ArrayList中提供了size方法,直接返回当前size(即为最后一个元素的下标),而不是返回ArrayList的长度