原文出处:http://www.blogjava.net/smcdl/archive/2008/10/22/235890.html
List的有用实现
1.ArrayList
2.LinkedList
3.Vector
4.Stack
讨论1:底层机制(牵扯到的数据结构的知识请读者自行复习)
ArrayList与Vector都是基于数组实现的,这就说明ArrayList与Vector适合做遍历而不适合做频繁的插入和删除。
LinkedList是基于链表实现的,所以它生来就是为了频繁插入与删除对象。
讨论2:特殊功能
Stack是一个后进先出(LIFO)对象堆栈,而LinkedList除可以被用作堆栈外,还可以被用作队列或双端队列。
不同的是Stack继承自Vector,也就是说它也是基于数组实现的。
讨论3:内存占用
基于数组实现的List,在动态扩展时会产生新的数组,然后把旧数组里的内容复制到新数组里,
这会产生大量的不再被使用的对象引用变量等待系统回收。而基于链表实现的List就不会有这种问题。
讨论4:同步问题
Vector与Stack生来就是同步的,而ArrayList与LinkedList需要使用Collections.synchronizedList(List list)方法来转换成同步List。
从它们的对象上返回的迭代器是快速失败的,也就是说在使用迭代器进行迭代的时候,必须使用迭代器本身的remove、add、set
方法来添加或更改List元素,如果在迭代的同时,在其他线程中从结构上修改了List(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改),快速失败迭代器会尽最大努力抛出ConcurrentModificationException。
讨论5:使用策略
如果数据被从数据源提取,数据量不确定,该数据一经被提取后就几乎不会再添加或删除,那么应该建立一个LinkedList来保存从数据源中取出的数据,然后将该LinkedList转换成ArrayList来优化遍历操作。反过来,数据量确定的数据从数据源取出可以先建立一个ArrayList来保存,根据需要如需频繁增删,就转换为LinkedList,如频繁遍历就不需转换。
转换的方法就是使用对应的List类来封装目标List对象。如
ArrayList al = new ArrayList();
LinkedList ll = new LinkedList(al);
同理反过来也可以
LinkedList ll = new LinkedList();
ArrayList al = new ArrayList(ll);
讨论6:toArray()方法
基于数组实现的List会直接返回一个底层数组的拷贝(使用了System.arraycopy方法),基于链表实现的List会新生成一个数组。
讨论7:不可修改
通过使用Collections.unmodifiableList(List list)来生成一个不可修改的List,试图修改返回的列表,不管是直接修改还是通过其迭代器进行修改,都将导致抛出UnsupportedOperationException。
讨论8:遍历器
请尽量使用Iterator,Enumeration已不被鼓励使用。
最后,请参考java.util.Collections类,该类提供了很多有用的操纵集合对象的方法
分享到:
相关推荐
Java集合框架是一个高度抽象化的数据结构模型,它提供了一系列标准的接口、抽象类以及具体的实现类来帮助开发者高效地管理和操作各种对象集合。这一框架是Java 2平台的重要组成部分之一,极大地简化了面向对象编程中...
Java集合框架是一个高度抽象化的数据结构系统,它提供了一系列接口、抽象类以及具体的实现类来帮助开发者管理和操作对象集合。通过理解这些核心概念,我们可以更加高效地利用Java语言进行编程。 #### 二、Java集合...
本章PDF课件详细讲解了这些概念,并可能包括实例代码演示、性能分析以及各种操作的注意事项,旨在帮助学习者深入理解并熟练运用Java集合框架。通过学习,开发者可以更高效地管理内存资源,优化程序性能,解决实际...
Java集合框架的注意事项有: * 需要合理地选择集合实现类,根据不同的业务需求选择合适的集合实现类 * 需要合理地使用集合操作方法,避免出现性能问题 * 需要注意集合的线程安全问题,避免出现并发问题 Java集合...
【Java集合框架概述】 Java集合框架是Java编程语言中用于存储和管理对象的重要工具,它提供了多种数据结构,如数组、列表、集合并和映射等。集合框架使得程序员能够高效地处理对象,同时提供了丰富的操作接口和实现...
- Java集合框架分为两大类:一类是单个元素存储的`Collection`,如`Set`和`List`,它们都实现了`Collection`接口;另一类是按`Key-Value`存储的`Map`。 2. **List集合**: - `ArrayList`:基于动态数组实现,适合...
在Java编程过程中,掌握一些关键的注意事项至关重要,这不仅能提高代码质量,还能避免常见的编程陷阱。以下是一些关于"JAVA注意事项"的详细说明: 1. **命名规范**:Java有严格的命名规则,类名应使用驼峰式命名,...
7. **Java集合框架的理解**:了解Java集合框架的设计理念,如List接口实现了有序且允许重复的序列,Set接口实现了无序且不允许重复的集合,以及Array是固定大小的原始类型或对象的数组,有助于更好地理解这些转换...
本文将详细介绍一种在Java中循环遍历任何一个集合的通用方法,并通过示例代码来具体说明其实现过程及注意事项。 #### 1. 集合遍历的重要性 集合框架是Java中非常基础且重要的组成部分之一,它提供了存储和管理对象...
在Java集合框架中,`Iterator`接口提供了一种遍历集合的标准方式,其核心方法有: - `hasNext()`:判断集合中是否还有更多的元素。 - `next()`:返回集合中的下一个元素。 典型用法如下: ```java Iterator it = ...
1. **Java List对象**:在Java中,`List`是`java.util`包中的接口,它是集合框架的一部分,用于存储一组有序的、可重复的元素。常见的`List`实现包括`ArrayList`和`LinkedList`。`List`提供了按索引访问元素的能力,...
Java集合框架是Java API的一个核心部分,它提供了一系列接口和类,用于创建和操作集合。这些接口和类包括ArrayList、LinkedList、HashSet、HashMap等,它们各自具有不同的特性和用途。 ArrayList是基于动态数组实现...
在Java编程语言中,`List`是集合框架的一部分,它是一个有序的集合,允许重复元素。`List`接口位于`java.util`包下,继承自`Collection`接口,并且实现了`Iterable`接口,使得我们可以使用增强型for循环来遍历列表。...
- **封装**:Java集合框架使用接口来定义容器的行为,通过抽象数据类型提供了一种封装机制。 - **泛型**:从Java 5开始,集合框架引入了泛型,允许在编译时检查类型安全,并避免运行时的类型转换异常。 - **迭代器**...
在Java编程中,List接口是集合框架的重要组成部分,它提供了有序、可重复的元素存储。在实际开发中,我们经常需要删除List中的特定元素。然而,直接使用索引进行删除可能会引发一些问题,正如标题和描述中提到的那样...
- **List**:`List`是Java集合框架的一部分,用于存储元素的有序集合。`List`接口的一个具体实现是`ArrayList`。 - **String**:`String`类代表字符序列,是不可变的对象。`String`对象一旦创建后,其内容就不能改变...
在Java集合框架中,`Collections`工具类提供了一个`reverse()`方法,可以用来反转List类型的集合。例如,如果你有一个ArrayList或LinkedList,你可以直接调用`Collections.reverse(list)`来反转集合中的元素顺序。 ...
List集合映射是其中常见的一种方式,它允许我们将数据库中的一组相关记录映射到Java对象的List列表中。这种映射机制使得在操作数据时更加灵活方便,能够实现对象关系映射(ORM)的优势。 **一、List集合映射的基础...
二、Java集合框架 集合框架是Java面试中的热门话题,包括List、Set、Map接口及其实现类的特性和使用场景。 1. ArrayList和LinkedList:它们的实现方式和性能对比。 2. HashSet和HashMap:哈希算法的理解及其冲突解决...