但逢良辰,顺颂时宜
—— 24.5.28
一、List接口
1.概述:
是collection接口的子接口
2.常见的实现类:
ArrayList LinkedList Vector
二、List集合下的实现类
1.ArrayList集合的使用及源码分析
1.概述
ArrayList是List接口的实现类
2.特点
a.元素有序 —> 按照什么顺序存的,就按照什么顺序取
b.元素可重复
c.有索引 —> 可以利用索引去操作元素
d.线程不安全3.数据结构:数组
4.常用方法
boolean add(E e) —> 将元素添加到集合中 —> 尾部(add方法一定能添加成功的,所以我们不用boolean接收返回值)
void add(int index,E element) —> 在指定索引位置上添加元素boolean remove(Object o) —> 删除指定的元素,删除成功为true,失败为false
E remove(int index) —> 删除指定索引位置上的元素,返回的是被删除的元素
E set(int index,E element) —> 将指定索引位置上的元素,修改成后面的element元素
E get(int index) —> 根据索引获取元素
int size() —> 获取集合元素个数5.示例
package S83SetFrame; import java.util.ArrayList; public class Demo226List { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); // boolean add(E e)->将元素添加到集合中->尾部(add方法一定能添加成功的,所以我们不用boolean接收返回值) list.add("一切都会好的"); list.add("我一直相信"); list.add("万事胜意"); System.out.println(list); // [一切都会好的, 我一直相信, 万事胜意] // void add(int index,E element)->在指定索引位置上添加元素 list.add(2,"苦难是花开的伏笔"); System.out.println(list); // [一切都会好的, 我一直相信, 苦难是花开的伏笔, 万事胜意] // boolean remove(0bject o)->删除指定的元素,删除成功为true,失败为false list.remove("苦难是花开的伏笔"); System.out.println(list); // [一切都会好的, 我一直相信, 万事胜意] // E remove(int index)->删除指定索引位置上的元素,返回的是被删除的那个元素 String res = list.remove(2); System.out.println(res); // 万事胜意 System.out.println(list); // [一切都会好的, 我一直相信] // E set(int index,E element)->将指定索引位置上的元素,修改成后面的element元素 String res1 = "会好 迟早"; list.set(0,res1); System.out.println(list); // [会好 迟早, 我一直相信] // E get(int index)->根据索引获取元素 String res2 = list.get(1); System.out.println(res2); // 我一直相信 // int size()->获取集合元素个数 int size = list.size(); System.out.println(list.size()); // 2 System.out.println(size); // 2 } }
List集合的遍历:
package S83SetFrame; import java.util.ArrayList; import java.util.Iterator; public class Demo227ListForeach { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); // boolean add(E e)->将元素添加到集合中->尾部(add方法一定能添加成功的,所以我们不用boolean接收返回值) list.add("一切都会好的"); list.add("我一直相信"); list.add("万事胜意"); // 遍历方式1: Iterator<String> iterator = list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } // 遍历方式2: 快捷键: 集合名.fori for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
列表元素是整数型的删除
需求:删除2 remove(object o)->直接删除指定元素 remove(int index)->删除指定索引位置上的元素 如果remove中直接传递整数,默认调用按照指定索引删除元素的remove但是此时1ist中没有2索引,所以越界 解决:我们可以将2包装成包装类,变成包装类之后,其父类就是objectpackage S83SetFrame; import java.util.ArrayList; public class Demo228ListDeleteInt { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); list.add(2); // 需求:删除2 // remove(object o)->直接删除指定元素 // remove(int index)->删除指定索引位置上的元素 // 如果remove中直接传递整数,默认调用按照指定索引删除元素的remove但是此时1ist中没有2索引,所以越界 // 解决:我们可以将2包装成包装类,变成包装类之后,其父类就是object了 list.remove(new Integer(2)); System.out.println(list); } }
6.ArrayList构造方法:
a.ArrayList() 构造一个初始容量为十的空列表
b.ArrayList(int initialcapacity) 构造具有指定初始容量的空列表
7.ArrayList源码总结:
a.不是一new底层就会创建初始容量为10的空列表,而是第一次add的时候才会创建初始化容量为10的空列表
b.ArrayList底层是数组,那么为啥还说集合长度可变呢?
ArrayList底层会自动扩容 —> Arrays.copyof
c.扩容多少倍?
1.5倍2.LinkedList集合的使用及源码分析
1.概述
LinkedList是List接口的实现类
2.特点
a.元素有序
b.元素可重复
c.有索引 —> 这里说的有索引仅仅指有操作索引的方法,不代表本质上具有索引
d.线程不安全3.数据结构
双向链表
4.方法
public void addFirst(E e):将指定元素插入此列表的开头。
public void addLast(E e):将指定元素添加到此列表的结尾。
public E getFirst():返回此列表的第一个元素。
public E getLast():返回此列表的最后一个元素。
public E removeFirst():移除并返回此列表的第一个元素。
public E removeLast():移除并返回此列表的最后一个元素。
public E pop():从此列表所表示的堆栈处弹出一个元素。
public void push(E e):将元素推入此列表所表示的堆栈。
public boolean isEmpty():如果列表没有元素,则返回true。5.示例
package S83SetFrame; import java.util.LinkedList; public class Demo229LinkedList { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("A"); linkedList.add("B"); linkedList.add("C"); linkedList.add("D"); linkedList.add("E"); System.out.println(linkedList); // public void addFirst(E e):将指定元素插入此列表的开头。 linkedList.addFirst("F"); linkedList.addFirst("G"); System.out.println(linkedList); System.out.println("————————————————————————————————————"); // public void addLast(E e):将指定元素添加到此列表的结尾。 linkedList.addLast("H"); linkedList.addLast("I"); linkedList.addLast("J"); System.out.println(linkedList); System.out.println("————————————————————————————————————"); // public E getFirst():返此列表的第一个元素。 System.out.println(linkedList); System.out.println(linkedList.getFirst()); System.out.println("————————————————————————————————————"); // public E getLast():返回此列表的最后一个元素。 System.out.println(linkedList); System.out.println(linkedList.getLast()); System.out.println("————————————————————————————————————"); // public E removeFirst():移除并返回此列表的第一个元素。 String ele = linkedList.removeFirst(); System.out.println(ele); System.out.println(linkedList); System.out.println("————————————————————————————————————"); // public E removeLast():移除并返回此列表的最后一个元素。 String ele2 = linkedList.removeLast(); System.out.println(ele2); System.out.println(linkedList); System.out.println("————————————————————————————————————"); // public E pop():从此列表所表示的堆栈处弹出一个元素。 System.out.println(linkedList.pop()); System.out.println(linkedList); System.out.println("————————————————————————————————————"); // public void push(E e):将元素推入此列表所表示的堆栈。 linkedList.push("K"); System.out.println(linkedList); System.out.println("————————————————————————————————————"); // public boolean isEmpty():如果列表没有元素,则返回true. System.out.println(linkedList.isEmpty()); } }
linkedList的遍历
package S83SetFrame; import java.util.Iterator; import java.util.LinkedList; public class Demo230LinkedListForeach { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("A"); linkedList.add("B"); linkedList.add("C"); linkedList.add("D"); linkedList.add("E"); System.out.println(linkedList); // 遍历 Iterator<String> iterator = linkedList.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } // 根据索引遍历 for (int i = 0; i < linkedList.size(); i++) { System.out.println(linkedList.get(i)); } } }