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指向0for (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: 遍历过程中需要增删元素或操作索引时使用
迭代器: 遍历过程中需要删除元素时使用【一个类中一个迭代器对象只能用一次】