List接口 [Collection】的子类
1.ArrayList【查询快,增删慢】
(1)ArrayList常见方法【部分】
//list[Collection的子类,也是接口],ArrayList也是其实现类
public class Demo2 {
public static void main(String[] args) {
List<String> list =new ArrayList<>();
//ArrayList<String> collection =new ArrayList<>();后面还是直接用list的实现类
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("dddd");
//打印集合包含“a”的元素
for (int i = 0; i < list.size(); i++) {
if (list.get(i).contains("a")) {
System.out.println(list.get(i));
}
}
//add指定位置插入指定的元素
list.add(0,"000");
//List.remove删除指定[索引]处的元素,返回被删除的元素,此处所用
//Collection.remove删除指定内容的元素,返回删除是否成功的boolean类型
String rs1 = list.remove(0);
//set修改指定索引处的元素,返回被修改的元素
//被修改的元素就会不存在了
String rs2 = list.set(2, "eee");
}
(2)ArrayList底层实现思想
//List集合常用实现类ArrayList底层
public class Demo1 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();2.默认长度为10,size指向0
for (int i = 0; i < 10; i++) {
list.add("你好");
1.作第一次添加时,会做判断,返回默认长度10
}
3长度超过10,size指向10,集合扩容1.5倍【将原来的数组拷贝到新的数组中】
}
}
2.LinkedList【增删快,查询慢】
(1)LinkedList常见方法【部分】
//LinkedList 具体实现类,【双向】链表
public class Demo3 {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("dddd");
//表头插入指定的元素
list.addFirst("0000");
//末尾插入指定的元素
list.addLast("11111");
//返回第一个元素
String first = list.getFirst();
//返回最后一个元素
String last = list.getLast();
//删除第一个元素并返回
String s1 = list.removeFirst();
//删除最后一个元素并返回
String s2 = list.removeLast();
}
(2)LinkedList底层实现思想
//List集合常用实现类linkedList底层【双向】链表
public class Demo2 {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
for (int i = 0; i < 10; i++) {
list.add("你好");
//Node为其内部类
1.作第一次添加时,会创建 Node<E>first,Node<E>Last记录头节点地址和最后一个节点地址
2.添加会new一个Node新节点,将内容赋值给它,将头尾地址指向它[第一次指向头尾相同]
3.再次做添加,则会再new Node<l,e,null>一个新节点,左指向会指向l[第一次添加的地址],Node<E>Last则会重新指向新节点的右指向
}
list.get(2);
//获取索引先判断离头近还是离尾近[通过index和size>>2来判断]
//然后从头或者从尾一一查找
}
}
3.List实现类三种遍历方式
//迭代器遍历,使用集合对象创建迭代器对象
//一个类中一个迭代器对象只能用一次
Iterator<String> it = list.iterator();
while (it.hasNext()){
String next = it.next();
System.out.println(next);
}
//增强for遍历
for(String i:list){
System.out.println(i);
}
//普通for遍历
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
注:
增强for: 对集合进行遍历时使用,遍历过程中若要增删元素则不能使用
普通for: 遍历过程中需要增删元素或操作索引时使用
迭代器: 遍历过程中需要删除元素时使用【一个类中一个迭代器对象只能用一次】