list集合
特点
有序:存和取的元素顺序一致
有索引:可以通过索引操作元素
可重复:存储的元素可以重复
特有方法
Collection的方法List都继承了
List集合因为有索引,所以多了很多索引操作的方法
方法名 | 说明 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
//1.创建一个集合
List<String> list = new ArrayList<>();
//2.添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
//void add(int index,E element) 在此集合中的指定位置插入指定的元素
//细节:原来索引上的元素会依次往后移
list.add(1,"qqq");
//E remove(int index) 删除指定索引处的元素,返回被删除的元素
String remove = list.remove(2);
System.out.println(remove);
//E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
String result = list.set(0,"qqq");
System.out.println(result);
//E get(int index) 返回指定索引处的元素
String s = list.get(1);
System.out.println(s);
System.out.println(list);
//List系列集合中的两个删除的方法
//1.直接删除元素
//2.通关索引进行删除
//1.创建集合并添加元素
List<Integer> list= new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//2.删除元素
//此时啥才能的是1这个索引
//因为在调用方法的时候,如果方法出现了重载现象
//优先调用,实参跟形参类型一致的那个方法
list.remove(1);
//手动装箱,手动吧基本数据类型的1,变成Integer类型
Integer i = Integer.valueOf(1);
list.remove(i);
System.out.println(list);
遍历方式
迭代器遍历
列表迭代器遍历
增强for遍历
Lambda表达式遍历
普通for循环(因为List集合存在索引)
//1.创建一个集合并添加元素
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//1.迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()){
String next = it.next();
System.out.println(next);
}
//2.增强for
//下面的变量s,其实就是一个第三方的变量而已
//在循环的过程中,一次表示集合中的每一个元素
for (String s : list) {
System.out.println(s);
}
//3.Lambda表达式
//forEach方法的底层其实就是一个循环变量,依次得到集合中的每一个元素
//并把每一个元素传递给下面的acceot方法
//accept方法的形参s,依次表示集合中的每一个元素
list.forEach(s-> System.out.println(s));
//4.普通for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//5.列表迭代器
//获取一个列表迭代器的对象,里面的指针默认也是默认指向0索引的
//额外添加了一个方法,在遍历的过程中,可以添加元素
ListIterator<String> slit = list.listIterator();
while (slit.hasNext()){
String next = slit.next();
if ("bbb".equals(next)) {
slit.add("qqq");
}
System.out.println(next);
}
System.out.println(list);
while (slit.hasPrevious()){
String next = slit.previous();
System.out.println(next);
}
五中遍历方法对比
迭代器遍历:在遍历的过程中需要删除元素,请使用迭代器
列表迭代器:在遍历的过程中需要添加元素,请使用列表迭代器
增强for遍历&Lambdabiaods:仅仅想遍历,那么使用增强for或Lambda表达式
普通for:如果遍历的时候想操作索引,可以用普通for
ArrayList集合底层原理
1:利用空参创建的集合,在底层创建一个默认长度为0 的元素
2.添加第一个元素时,底层会创建一个新的长度为10的数组
3.存满时:会扩容1.5倍
4.如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准
LinkedList集合
底层数据结构是双链表,查询慢,增删快,但是如果是操作的是首尾元素,速度元素极快的
LinkedList本身多了很多直接操作首尾元素的特有API
特有方法 | 说明 |
---|---|
public void addFirst(E e) | 在该列表的开头插入指定的元素 |
public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |
迭代器源码分析
elementDate:获取了ArrayList这个数组底层的数组,之后的便可以直接使用,不需要在重写查找
标签:进阶,元素,list,System,索引,add,集合,println From: https://www.cnblogs.com/kuangshihe/p/16647484.html