ArrayList<Thing>
是一个Java集合框架中的动态数组实现,它可以存储任意类型的对象,包括自定义对象。在这个例子中,Thing
是一个自定义类,而 ArrayList<String>
是 Thing
类的一个属性,表示 Thing
对象可以持有一个字符串列表。
ArrayList
可以根据需要自动扩容,不需要预先指定大小。ArrayList
支持快速的随机访问。ArrayList<Thing>
使用了Java的泛型机制,确保类型安全。Thing
类中的 ArrayList<String>
是一个嵌套集合,表示复杂的数据结构。import java.util.ArrayList;
class Thing {
private ArrayList<String> stringList;
public Thing() {
this.stringList = new ArrayList<>();
}
public void addString(String str) {
stringList.add(str);
}
public ArrayList<String> getStringList() {
return stringList;
}
}
public class Main {
public static void main(String[] args) {
Thing thing = new Thing();
thing.addString("Hello");
thing.addString("World");
System.out.println(thing.getStringList()); // 输出: [Hello, World]
}
}
原因:当一个线程正在遍历 ArrayList
,而另一个线程同时对其进行修改时,可能会抛出此异常。
解决方法:
CopyOnWriteArrayList
替代 ArrayList
,它适用于读多写少的并发场景。remove
方法进行删除操作。import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;
public class Main {
public static void main(String[] args) {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
list.add("A");
list.add("B");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (item.equals("A")) {
list.remove(item); // 不会抛出ConcurrentModificationException
}
}
}
}
原因:当 ArrayList
不断添加元素且未及时清理,导致内存占用过高时,可能会引发此错误。
解决方法:
ArrayList<Thing>
结合了动态数组的优势和泛型的类型安全特性,适用于多种场景。在实际应用中,需要注意并发访问时的线程安全和内存管理问题,以确保系统的稳定性和性能。
领取专属 10元无门槛券
手把手带您无忧上云