List集合


java
package com.itheima.demo7list;
import java.util.ArrayList;
import java.util.List;
public class ListDemo1 {
public static void main(String[] args) {
//目标:掌握List集合独有的功能
List<String> list = new ArrayList<>();//一行经典代码 多态
//添加元素
list.add("hello");
list.add("world");
list.add("java");
list.add("java");
System.out.println(list);//[hello, world, java, java]
//给第三个位置插入一个数据,唐三
list.add(2,"唐三");
System.out.println(list);//[hello, world, 唐三, java, java]
//删除一个元素hello
list.remove("hello");
//list.remove(0); //按照索引删除
System.out.println(list);//[world, 唐三, java, java]
//把world修改为白小纯
list.set(0,"白小纯");
System.out.println(list);//[白小纯, 唐三, java, java]
//获取元素
String s = list.get(0);
System.out.println(s);//白小纯
}
}

java
System.out.println("======================四种遍历方式============================");
//1、for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//2、迭代器
Iterator<String> it = list.iterator();//创建一个迭代器对象
while (it.hasNext()) //判断集合中是否有元素
{
String s1 = it.next();
System.out.println(s1);
}
//3、增强for(迭代器的简化)
for (String s2 : list) //for(集合元素类型 变量名 : 集合对象)
{
System.out.println(s2);
}
//4、Lambda表达式
//未简化形式
// list.forEach(new Consumer<String>() {
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
// });
list.forEach(s3 -> System.out.println(s3));
ArrayList底层原理

是在第一次添加数据后创建数组,本来是空数组
LinkedList底层原理


双向链表每个节点包括上一个节点地址和下一个节点地址


LinkedList应用场景
1、

java
package com.itheima.demo7list;
import java.util.LinkedList;
public class ListDemo2 {
public static void main(String[] args) {
//目标:用LinkedList做一个队列对象
LinkedList<String> queue = new LinkedList<>();//LinkedList的独有功能不能用多态
//入队
queue.addLast("凯撒");
queue.addLast("楚子航");
queue.addLast("诺诺");
queue.addLast("路明非");
System.out.println(queue);//[凯撒, 楚子航, 诺诺, 路明非]
//出队
System.out.println(queue.removeFirst());
System.out.println(queue.removeFirst());
System.out.println(queue);//[诺诺, 路明非]
}
}
2、

java
//做一个栈
LinkedList<String> stack = new LinkedList<>();
//压栈
//stack.push("林动");//也可以用push,包了addFirst的皮
stack.addFirst("林动");
stack.addFirst("林貂");
stack.addFirst("林炎");
stack.addFirst("大荒囚天指");
stack.addFirst("紫影九动");
System.out.println(stack);//[紫影九动, 大荒囚天指, 林炎, 林貂, 林动]
//弹栈
System.out.println(stack.pop());////也可以用pop,包了removeFirst的皮
System.out.println(stack.removeFirst());
System.out.println(stack.removeFirst());
System.out.println(stack);//[林炎, 林貂, 林动]
LinkedList小结

增删比较少,查询比较多,用ArrayList,占内存少,用的比较多;
增删相对多,查询少,用LinkedList,比较占内容