Java集合:ArrayList与LinkedList的使用指南
立即解锁
发布时间: 2025-08-18 00:27:50 阅读量: 2 订阅数: 19 

### Java 集合:ArrayList 与 LinkedList 的使用指南
#### 1. ArrayList 的使用
ArrayList 是基于数组的集合类,以下是关于它的一些常见操作:
##### 1.1 遍历元素
可以使用迭代器来遍历 ArrayList 中的元素。示例代码如下:
```java
nums.add("Four");
String s;
Iterator e = nums.iterator();
while (e.hasNext())
{
s = (String)e.next();
System.out.println(s);
}
```
上述代码首先创建了一个 ArrayList 并添加了四个字符串,然后调用 `iterator()` 方法获取迭代器,通过 `hasNext()` 方法判断是否还有元素,`next()` 方法获取元素并打印。需要注意的是,`next()` 方法返回的对象必须强制转换为 `String` 类型,因为 `Iterator` 接口不知道集合中存储的对象类型,它只返回 `Object` 类型。
##### 1.2 更新元素
可以使用 `set()` 方法来替换 ArrayList 中的现有对象。示例代码如下:
```java
ArrayList<String> nums = new ArrayList<String>();
nums.clear();
nums.add("One");
nums.add("Two");
nums.add("Three");
System.out.println(nums);
nums.set(0, "Uno");
nums.set(1, "Dos");
nums.set(2, "Tres");
System.out.println(nums);
```
运行上述代码,控制台输出如下:
```
[One, Two, Three]
[Uno, Dos, Tres]
```
由于 ArrayList 存储的是对象的引用,而不是对象本身,对 ArrayList 中对象的任何更改都会自动反映在列表中,因此通常不需要经常使用 `set()` 方法。例如:
```java
ArrayList<Employee> emps = new ArrayList<Employee>();
// add employees to array list
emps.add(new Employee("Addams", "Gomez"));
emps.add(new Employee("Taylor", "Andy"));
emps.add(new Employee("Kirk", "James"));
// print array list
System.out.println(emps);
// change one of the employee's names
Employee e = emps.get(1);
e.changeName("Petrie", "Robert");
// print the array list again
System.out.println(emps);
```
运行上述代码,控制台输出如下:
```
[Gomez Addams, Andy Taylor, James Kirk]
[Gomez Addams, Robert Petrie, James Kirk]
```
可以看到,即使程序没有使用 `set()` 方法来替换更改后的 `Employee` 对象,第二个员工的名字也被更改了。
##### 1.3 删除元素
ArrayList 类提供了几个方法来从集合中删除元素:
- **清除所有元素**:使用 `clear()` 方法,例如 `emps.clear();`。
- **删除特定元素**:可以使用 `remove()` 方法,根据索引编号删除元素,例如 `emps.remove(0);`;也可以传递要删除的实际对象,例如:
```java
ArrayList<Employee> emps = new ArrayList<Employee>();
// create employee objects
Employee emp1 = new Employee("Addams", "Gomez");
Employee emp2 = new Employee("Taylor", "Andy");
Employee emp3 = new Employee("Kirk", "James");
// add employee objects to array list
emps.add(emp1);
emps.add(emp2);
emps.add(emp3);
// print the array list
System.out.println(emps);
// remove one of the employees
emps.remove(emp2);
// print the array list again
System.out.println(emps);
```
运行上述代码,控制台输出如下:
```
[Gomez Addams, Andy Taylor, James Kirk]
[Gomez Addams, James Kirk]
```
可以看到,程序在不知道 Andy Taylor 的索引位置的情况下,成功从列表中删除了他。
需要注意的是:
- `clear()` 和 `remove()` 方法实际上并不会删除对象,它们只是从 ArrayList 中移除对象的引用。对象是否被删除取决于垃圾回收器,只有当对象不再被程序引用时,才会被自动删除。
- 可以使用 `removeRange()` 方法同时删除多个元素,需要指定起始和结束索引编号。例如 `removeRange(5, 8)` 会删除元素 6 和 7,但元素 5 和 8 不会被删除。
- 还可以使用 `removeAll()` 方法从一个集合中删除另一个集合中的所有对象,`retainAll()` 方法则会删除不在另一个集合中的所有对象。
#### 2. LinkedList 的使用
ArrayList 基于数组,数组有其优点和缺点。数组的优点是效率高,但在填充或插入、删除元素时会变得非常低效。链表是数组的一种替代方案,它在直接根据索引访问元素时效率不如数组,但在插入或删除列表中间的元素时比数组更高效。
##### 2.1 理解 LinkedList 类
链表中的每个对象都维护着一个指向下一个对象的指针和一个指向前一个对象的指针,链表完全由这些指针管理。LinkedList 类会自动处理这些指针管理,无需手动操作。
链表相对于数组有以下优点:
- **无大小限制**:ArrayList 在添加元素时,底层数组满了需要重新分配数组,而 LinkedList 没有大小问题,可以一直添加元素直到计算
0
0
复制全文
相关推荐










