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

Java中的List接口和ArrayList类:使用方法和区别

发布时间:2023-06-15 17:49:18

Java中的List接口和ArrayList类是Java集合框架中常用的类和接口,二者在使用上有一些区别。

List接口定义了一些基本的操作集合元素的方法,如添加、删除、遍历等,常见的实现有ArrayList、LinkedList等。ArrayList类是基于数组实现的,是List接口的一个数组列表实现,它可以存储任意类型的对象,而且能够动态扩容。以下是它们的具体使用方法和区别。

1. List接口和ArrayList类的创建方式

List接口不能直接被实例化,只能通过实现类来实例化一个List对象。

List<String> list = new ArrayList<>();

ArrayList实例化后,可以向其中添加元素。

list.add("zhangsan");
list.add("lisi");
list.add("wangwu");

2. List接口和ArrayList类的遍历方式

利用for循环遍历List中的元素。

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

toArray()方法可以将List转换成数组,再利用for循环遍历。

Object[] objArr = list.toArray();
for (Object o : objArr) {
    System.out.println(o);
}

使用迭代器Iterator遍历List。

Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
  System.out.println(iter.next());
}

3. List接口和ArrayList类的元素性质

List中的元素是有序的,可以根据元素的下标获取元素。

ArrayList中的元素是可重复的,可以存在相同的元素。

4. List接口和ArrayList类的性能区别

ArrayList作为List接口的一种实现,其大部分的操作的时间复杂度都是O(1),但在涉及到插入和删除操作时,时间复杂度分别为O(n)和O(n),因为需要将数组中的元素重新排序。

LinkedList在插入和删除中更加高效,因为只需要改变链表中节点的指向,时间复杂度为O(1)。但是在查询时,LinkedList需要遍历整个链表才能获取元素,时间复杂度为O(n)。

综上所述,List接口和ArrayList类是Java集合中重要的类和接口,选择使用哪一种可以根据实际需求选择。对于需要进行频繁的添加和删除操作的情况,可以选择LinkedList。对于大量查询操作的情况,ArrayList是更优的选择。需要注意的是,在多线程情况下,使用ArrayList需要考虑同步问题,而LinkedList不需要。