Java中的List接口和ArrayList类:使用方法和区别
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不需要。
