导语
集合其实就是一个可以自动扩容的数组,它有一个默认长度,List的默认长度是10,增长因子是0.5;Set,Map默认长度为16,增长因子为0.75。但他们的具体原理又不一样,实现类也不一样,接下来,让我们一起去回顾一下吧!
List
首先它的实现类有:arraylist,LinkedList,Vector,CopyOnWriteArrayList。
arraylist是list最常用的实现类,但它其实是线程不安全的,但是是放在类变量的时候是不安全的,如果作为成员变量,方法变量其实安全的,因为这不存在线程安全不安全的问题。array list的内部就是封装好的数组, 所以它额随机访问速度在list中是最快的,但如果是集合的使用的话,如果它的数据访问量较小,那么list的随机访问速度要快,如果是数据的访问量大的话,HashMap 的访问速度肯要比array list要快。
在这里我们在回顾一下我们的list删除的时候要注意的点
package com.zking.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
public class Tesylist {
List<Integer> list;
@Before
public void setup() {
list = new ArrayList<Integer>();
list.add(1);
list.add(4);
list.add(8);
list.add(8);
list.add(12);
list.add(16);
}
/**
* 删除元素为8的元素
*/
@Test
public void listDel01() {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == 8)
list.remove(i);
}
System.out.println(list);
// 结果:[1,4,8,12,16],这种方式直接找到第一个元素8,找到后直接删除结束
}
@Test
public void listDel02() {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == 8)
list.remove(i--);
}
System.out.println(list);
// 结果:[1,4,12,16] 这种方式找到第一个8 删除,但第二个8同时发生移位,
// 直接跳到第一个8 的位置,但此时指针还未移动,所以又