欢迎访问宙启技术站
智能推送

Java ArrayList - 使用动态数组存储和检索数据

发布时间:2023-06-09 23:15:21

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进行数据的存储和检索,以及一些常用的方法和注意事项。