Java ArrayList之应用技巧

Java ArrayList之应用技巧

ArrayList是Java集合框架中最常用的动态数组实现,提供了灵活的数据存储和操作方式。掌握其核心技巧能显著提升开发效率。

初始化与容量优化

默认构造函数创建的ArrayList初始容量为10,频繁扩容可能影响性能。预先估算数据量并指定初始容量可减少扩容开销:

// 预估存放500个元素
ArrayList list = new ArrayList<>(500);

批量添加元素时使用addAll比循环添加更高效:

ArrayList srcList = new ArrayList<>();
// 填充数据...
ArrayList destList = new ArrayList<>();
destList.addAll(srcList);

元素遍历与删除

使用迭代器进行安全删除,避免ConcurrentModificationException:

ArrayList numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5));
Iterator it = numbers.iterator();
while(it.hasNext()) {
    if(it.next() % 2 == 0) {
        it.remove(); // 安全删除偶数
    }
}

Java 8+的forEach配合lambda表达式:

numbers.forEach(n -> System.out.println("Number: " + n));

数据转换与处理

与数组相互转换:

// ArrayList转数组
String[] arr = list.toArray(new String[0]);

// 数组转ArrayList
ArrayList newList = new ArrayList<>(Arrays.asList(arr));

使用Stream API进行过滤和映射:

List squares = numbers.stream()
                              .map(x -> x * x)
                              .collect(Collectors.toCollection(ArrayList::new));

排序与查找

自定义对象排序需实现Comparable或使用Comparator:

class Person implements Comparable {
    String name;
    // 实现compareTo...
}

ArrayList people = new ArrayList<>();
Collections.sort(people); // 自然排序

// 使用Comparator按名称排序
people.sort(Comparator.comparing(p -> p.name));

二分查找前必须排序:

Collections.sort(numbers);
int index = Collections.binarySearch(numbers, 42);

线程安全方案

ArrayList非线程安全,多线程环境可采用:

// 使用Collections.synchronizedList
List syncList = Collections.synchronizedList(new ArrayList<>());

// 或者使用CopyOnWriteArrayList
CopyOnWriteArrayList safeList = new CopyOnWriteArrayList<>();

性能敏感场景优化

频繁插入/删除考虑LinkedList,随机访问保持ArrayList。批量操作使用subList

List sub = list.subList(1, 4);
sub.clear(); // 删除原list的1-3位置元素

预先分配足够容量避免多次扩容:

ArrayList largeList = new ArrayList<>(10000);

Java 9+新增特性

使用List.of创建不可变列表:

List immutableList = List.of("A", "B", "C");

工厂方法创建ArrayList:

ArrayList quickList = new ArrayList<>(List.of("X", "Y", "Z"));

掌握这些技巧能充分发挥ArrayList优势,在合适场景下选择最优实现方案。注意根据具体需求权衡线程安全、性能开销和功能特性。

你可能感兴趣的:(java,python,windows)