ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[success] # List集合 1. `java.util.List`集合是**Collection集合的子集合**,该集合中允许**有重复的元素**并且有先后放入次序 2. 该集合的主要实现类有:`ArrayList类`、`LinkedList类`、`Stack类`、`Vector类` 3. `ArrayList`类的底层是采用动态数组进行数据管理的,支持下标访问,数组结构,支持自动扩容 ~~~ import java.util.ArrayList; import java.util.List; public class ListTest { public static void main(String[] args) { // 创建ArrayList 实现了接口List ,因此一个List接口类型的引用指向ArrayList类型的对象,形成了多态 // 由源码可知:当new对象时并没有申请数组的内存空间 List lt1 = new ArrayList(); // 第一次增加会申请ArrayList的默认初始容量为10,当然也可以自定义指定初始容量,随着动态的向其中添加元素, // 其容量可能会动态的增加,那么扩容的公式为:新容量 = 旧容量/2 + 旧容量 // 比如:初始容量为4,其容量的每次扩充后的新容量为:4->6->9->13->19->…即每次扩充至原有基础的1.5倍 lt1.add("one"); } } ~~~ 4. `LinkedList`类的底层是采用双向链表进行数据管理的,链表数据结构更适合于插入和删除 5. `Stack`类的底层是采用动态数组进行数据管理的,该类主要用于描述一种具有**后进先出**特征的数据结构,叫做栈(last in fifirst out LIFO) ~~~ import java.util.Stack; public class StackTest { public static void main(String[] args) { // 1.准备一个Stack类型的对象并打印 Stack s1 = new Stack(); Stack s2 = new Stack(); System.out.println("s1 = " + s1); // [啥也没有] System.out.println("s2 = " + s2); // [啥也没有] System.out.println("-----------------------------------------------"); // 2.将数据11、22、33、44、55依次入栈并打印 for (int i = 1; i <= 5; i++) { Object obj = s1.push(i * 11); System.out.println("入栈的元素是:" + obj); //System.out.println("栈中的元素有:" + s1); // 11 22 33 44 55 } System.out.println("-----------------------------------------------"); // 3.查看栈顶元素值并打印 //Object obj2 = s1.peek(); //System.out.println("获取到的栈顶元素是:" + obj2); // 55 System.out.println("-----------------------------------------------"); // 4.对栈中所有元素依次出栈并打印 int len = s1.size(); for (int i = 1; i <= len; i++) { Object to = s1.pop(); //System.out.println("出栈的元素是:" + to); // 55 44 33 22 11 s2.push(to); } System.out.println("-----------------------------------------------"); // 5.最终打印栈中的所有元素 //System.out.println("s1 = " + s1); // [啥也没有] System.out.println("-----------------------------------------------"); len = s2.size(); for (int i = 1; i <= len; i++) { Object to = s2.pop(); System.out.println("出栈的元素是:" + to); // 11 22 33 44 55 } } } ~~~ 6. `Vector`类的底层是采用动态数组进行数据管理的,该类与ArrayList类相比属于线程安全的类,效率比较低,以后开发中基本不用 >[danger] ##### List 常用api |方法声明 |功能介绍| |--|--| |void add(int index, E element) |向集合中指定位置添加元素| |boolean addAll(int index, Collection<? extends E> c)| 向集合中添加所有元素| |E get(int index)| 从集合中获取指定位置元素| |int indexOf(Object o) |查找参数指定的对象| |int lastIndexOf(Object o) |反向查找参数指定的对象| |E set(int index, E element) |修改指定位置的元素| |E remove(int index)| 删除指定位置的元素| |List subList(int fromIndex, int toIndex) |用于获取子List| ~~~ import java.util.ArrayList; import java.util.List; public class ListTest { public static void main(String[] args) { // 1.创建一个list 集合 List ls = new ArrayList(); // add 向集合中添加元 ls.add("1"); // 末尾插入 ls.add(0, "w"); // 指定插入元素位置 集合头部 // addAll 向集合中添加所有元素 List ls1 = new ArrayList(); ls1.add("1"); ls1.add("2"); ls.addAll(ls1); System.out.print(ls); // [w, 1, 1, 2] // get 根据下标获取元素 Object o = ls.get(0); System.out.print(o); // w // 向下转型 获取 实际存储的类型值 String str = (String) ls.get(0); System.out.print(str); // w // 使用 get 实现 toString 效果 StringBuffer strB = new StringBuffer(); strB.append('['); for (int i = 0; i < ls.size(); i++) { strB.append(ls.get(i)); if (ls.size() - 1 == i) { strB.append(']'); } else { strB.append(','); } } System.out.print(strB); // indexOf 根据值获取索引 int index = ls.indexOf("1"); System.out.print(index); // 1 // lastIndexOf 从后往前找 index = ls.lastIndexOf("1"); System.out.print(index); // 2 // set 修改指定位置元素 String s = (String) ls.set(0, "wwwww"); System.out.print("被修改位置元素" + s); // w // w 被修改为 wwwww System.out.print(ls); // [wwwww, 1, 1, 2] // remove 删除元素 ls.remove("wwwww"); System.out.print(ls); // [1, 1, 2] // 删除全部 元素 // for (int i = 0; i < ls.size(); ) { // 利用删除元素 size 改变来删除 /* * for (int i = ls.size()-1; i >= 0; i--) { // 倒序删除 * //System.out.println("被删除的元素是:" + ls.remove(i)); * 删除元素后,后面的元素补位 * //System.out.println("被删除的元素是:" + ls.remove(0)); * System.out.println("被删除的元素是:" + ls.remove(i)); * } */ // subList 获取当前集合中的子集合,也就是将集合中的一部分内容获取出来,子集合和当前集合共用同一块内存空间 List lt2 = ls.subList(1, 3); System.out.println("lt2 = " + lt2); // [1, 2] } } ~~~