### Java集合总结 Java集合框架提供了多种用于存储和操作数据的接口和实现类。其中最主要的三种类型是`List`、`Set`和`Map`。本文主要针对`List`进行详细的解析,包括其子类`ArrayList`和`LinkedList`的特点与应用场景。 #### List `List`是一个有序集合,允许元素重复。`List`接口定义了多个子类,包括`ArrayList`、`LinkedList`等。`List`的主要特点是可以保持元素插入时的顺序,提供了一系列操作元素的方法,如添加、删除、查询等。 #### ArrayList `ArrayList`是`List`接口的一个实现类,它通过动态数组的方式存储元素,因此提供了随机访问元素的能力。`ArrayList`的内部使用了一个数组来保存元素,当数组空间不足时,会自动扩容。这种方式使得`ArrayList`在处理随机访问时非常高效,但在插入或删除元素时可能需要移动大量元素,因此效率较低。 **`ArrayList`常用方法** 1. **添加** - `boolean add(E e);`:向列表尾部添加元素。 - `boolean add(int index, E e);`:在指定位置插入元素。 - `boolean addAll(List<E> e);`:向列表尾部添加一个列表的所有元素。 - `boolean addAll(int index, List<E> e);`:在指定位置插入一个列表的所有元素。 2. **修改** - `List<E> set(int index, E element);`:替换指定位置的元素。 3. **删除** - `List<E> remove(int index);`:移除指定位置的元素。 - `boolean remove(Object o);`:移除第一次出现的指定元素。 4. **查询** - `void clear();`:清空列表。 - `List<E> clone();`:复制列表。 - `boolean contains(Object o);`:判断列表是否包含指定元素。 - `E get(int i);`:获取指定位置的元素。 - `int indexOf(Object o);`:返回指定元素第一次出现的位置索引。 - `int lastIndexOf(Object o);`:返回指定元素最后一次出现的位置索引。 - `boolean isEmpty();`:判断列表是否为空。 5. **其他** - `int size();`:获取列表的大小。 - `Object[] toArray();`:返回包含列表所有元素的数组。 - `void trimToSize();`:将列表的容量调整为实际大小。 - `List<E> subList(int fromIndex, int endIndex);`:返回列表中指定范围内的新列表。 #### Stack(栈) `Stack`继承自`Vector`,是一个后进先出(LIFO)的数据结构。它提供了`push`和`pop`等方法来操作栈顶元素。 **`Stack`的常用方法** 1. **声明**:`Stack<E> stackDemo = new Stack<E>();` 2. **添加**:`stackDemo.push(E e);` 3. **访问栈顶元素(不弹出)**:`stackDemo.peek();` 4. **访问并弹出栈顶元素**:`stackDemo.pop();` **示例代码** ```java @Test public void testStack() { Stack<String> v = new Stack<String>(); v.push("A"); v.push("B"); v.push("C"); System.out.println(v); // 输出:[C, B, A] System.out.println(v.peek()); // 输出:C System.out.println(v); // 输出:[C, B, A] System.out.println(v.pop()); // 输出:C System.out.println(v); // 输出:[B, A] } ``` #### LinkedList `LinkedList`是基于链表实现的`List`,它维护了一个双向链表。这意味着每个元素都保存了对前后两个元素的引用。这使得`LinkedList`在插入和删除元素时非常高效,因为只需要改变相邻元素的引用即可,而无需移动大量的元素。 **`LinkedList`的操作** 1. **声明**:`LinkedList<String> linkList = new LinkedList<String>();` 2. **获取元素**:`linkList.getFirst()`获取第一个元素,`linkList.getLast()`获取最后一个元素。 3. **添加元素**:`linkList.add(E e)`或`linkList.addLast(E e)`在末尾添加元素,`linkList.addFirst(E e)`在开头添加元素。 4. **删除元素**:`linkList.removeFirst()`移除第一个元素,`linkList.removeLast()`移除最后一个元素。 5. **转换为ArrayList**:`ArrayList<String> arrayList = new ArrayList<String>(linkList);` #### 性能对比 - **ArrayList vs LinkedList** - **随机访问**:`ArrayList`更优,因为它是基于数组实现的。 - **插入与删除**:`LinkedList`更优,因为它只需改变指针即可完成操作,无需移动元素。 - **内存消耗**:`LinkedList`比`ArrayList`更高,因为除了存储元素本身外还需要额外的空间存储前后指针。 以上是对`List`及其两种实现类`ArrayList`和`LinkedList`的基本介绍和对比分析。在选择使用哪种类型的集合时,需要根据具体的业务需求和场景来决定。






















剩余8页未读,继续阅读


- 粉丝: 11
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 如何借助AI+数智应用工具提升科技平台的服务效率?.docx
- 如何借助AI+数智应用快速生成高质量的科技活动策划方案?.docx
- 如何借助AI+数智应用破解科技管理系统“缺乏价值创造”的难题?.docx
- 如何借助AI+数智应用手段激活科技管理系统的内外部资源?.docx
- 如何借助AI+数智应用提升大学科技管理的效能与价值?.docx
- 如何借助AI+数智应用有效构建科技资源平台以解决资源丰富性问题?.docx
- 如何利用AI+数智应用技术提升科技管理工作的价值创造能力?.docx
- 如何利用AI+数智应用技术提升科技管理工作的效率和创新能力?.docx
- 如何利用AI+数智应用让单场科技活动产生长期效益?.docx
- 如何利用AI+数智应用全流程创新诊断快速提升科技管理系统的智能化水平?.docx
- 如何利用AI+数智应用让科技管理工作既高效又具备创新性?.docx
- 如何利用AI+数智应用新产品提升政府科技监测的价值创造能力?.docx
- 如何让技术供需对接活动的匹配通过AI+数智应用更精准,避免资源浪费?.docx
- 如何通过AI+数智应用服务提升科技活动组织效率和资源匹配精准度?.docx
- 如何通过AI+数智应用工具解决科技管理中的环节性痛点?.docx
- 如何通过AI+数智应用工具提升科技活动供需匹配效率?.docx


