Java ArrayList - 使用动态数组存储和检索数据
Java ArrayList是Java集合框架中的一种动态数组,用于存储和检索数据。相比于普通数组,它具有更好的灵活性和易用性。本文将介绍如何使用Java ArrayList进行数据的存储和检索,并介绍一些常用的方法和注意事项。
1. 创建和初始化ArrayList
Java ArrayList可以存储任何类型的数据,包括基本数据类型和对象。创建一个ArrayList对象的方式很简单,可以使用空构造函数,也可以通过传递一个数组或另一个集合来初始化ArrayList。
//空构造函数
ArrayList list1=new ArrayList();
//带有初始容量的构造函数
ArrayList list2=new ArrayList(10);
//通过传递一个数组来初始化
int[] arr={1,2,3,4,5};
ArrayList list3=new ArrayList(Arrays.asList(arr));
//通过传递另一个集合来初始化
ArrayList list4=new ArrayList(list3);
2. 添加和删除元素
Java ArrayList提供了以下方法来添加和删除元素:
//添加元素 list.add(element) //将元素添加到末尾 list.add(index, element) //在指定索引位置插入元素 list.addAll(Collection<? extends E> c)//将另一个集合中的所有元素添加到列表末尾 //删除元素 list.remove(index) //删除指定索引处的元素 list.remove(element) //删除指定元素 list.clear() //清除列表中的所有元素
注意,删除元素时会改变列表中元素的索引。如果要遍历列表并删除元素,可以使用Iterator和remove()方法,否则会引发并发修改异常。
Iterator<Integer> iter=list.iterator();
while(iter.hasNext()){
if(iter.next()==2){
iter.remove(); //删除元素
}
}
3. 获取元素
Java ArrayList提供了多种方法来获取列表中的元素:
//获取元素 list.get(index) //获取指定索引处的元素 list.subList(from,to) //获取指定范围内的子列表 //查询元素 list.indexOf(element) //返回指定元素第一次出现的索引,若不存在则返回-1 list.lastIndexOf(element) //返回指定元素最后一次出现的索引,若不存在则返回-1 list.contains(element) //判断列表是否包含指定元素 list.isEmpty() //判断列表是否为空
4. 修改元素
Java ArrayList中元素是可变的,即可以修改已添加的元素的值。
//修改元素 list.set(index,element) //将指定索引处的元素替换为新元素
5. 遍历ArrayList
Java ArrayList可以使用for循环、增强型for循环或Iterator来遍历元素。另外,还可以使用lambda表达式和Stream API进行遍历操作。
//for循环
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
//增强型for循环
for(String str:list){
System.out.println(str);
}
//Iterator遍历
Iterator<String> iter=list.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
//lambda表达式遍历
list.forEach(str->System.out.println(str));
//Stream API遍历
list.stream().forEach(System.out::println);
6. 注意事项
虽然Java ArrayList具有很多优点,但也要注意以下事项。
- 虽然ArrayList能够动态调整大小,但频繁扩容也会影响性能,因此最好能够估计元素数量并在创建ArrayList时指定初始容量。
- ArrayList中元素的添加和删除性能不如LinkedList,因为后者插入和删除一个元素只需要修改相邻元素的指针,而前者要移动若干元素,因此在需要频繁插入和删除元素的情况下应当使用LinkedList。
- ArrayList是非线程安全的,如果多个线程同时修改一个ArrayList对象,可能会出现并发修改异常,因此需要使用同步机制来保证线程安全。
- Java 8之前,ArrayList没有针对基本数据类型提供相应的集合类型,因此需要将基本数据类型封装为对象后再添加到ArrayList中。但是Java 8引入了IntStream、DoubleStream、LongStream等基本类型流,可以直接操作基本类型,避免封装和拆装带来的开销。
Java ArrayList是Java集合框架中的一种动态数组,具有灵活性和易用性。本文介绍了如何使用Java ArrayList进行数据的存储和检索,以及一些常用的方法和注意事项。
