开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
1、写在前面
大家好,今天文章的内容是:
- List集合:包括List接口以及实现类
2、List接口
2.1、介绍
List接口继承了Collection接口,是一个有序集合。其元素是按照顺序排列的,并且可以重复。List中的每个元素都有一个index值(索引值,从0开始),用于表示元素在List中的位置。我们可以将不同类型的对象添加到List中。注意,List接口在声明时应使用泛型,即List<E>。
List接口的主要实现类包括:ArrayList,LinkedList等。
2.2、使用
List接口位于java.util包中,因此我们在使用List前需要先导包。
语法如下:
import java.util.List;
下面是List接口拥有的一些方法:
2.3、创建List
我们可以通过ArrayList或者LinkedList来创建List。
比如:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
list.add(300);
System.out.println(list); // [100, 200, 300]
}
}
2.4、遍历List
1)for + get
要遍历一个List集合,我们可以利用一个for循环加上get方法。如下所示:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
list.add(300);
for (int i=0; i<list.size(); i++) {
int val = list.get(i);
System.out.println(val);
}
}
}
// 运行结果:
// 100
// 200
// 300
2)Iterator
如果需要访问List中的元素,我们一般会使用Iterator(迭代器)来实现,因为这样访问的效率更高。
我们可以通过调用iterator()方法来创建Iterator对象。
这里记录两个实用方法:
boolean hasNext():判断Iterator对象是否有下一个元素E next():返回Iterator对象的下一个元素
举一个例子:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
list.add(300);
Iterator<Integer> it = list.iterator();
while(it.hasNext()) {
int val = it.next();
System.out.println(val);
}
}
}
// 运行结果:
// 100
// 200
// 300
3)For each
我们可以使用For each循环来遍历一个List集合。
这是因为Iterable接口定义了Iterator<E> iterator()方法,此时Java编译器在遍历集合类对象后,会自动把For each循环变成Iterator的调用,这样就会得到一个Iterator实例。因此只要实现了Iterable接口的集合类都可以直接用For each循环来遍历。
举个例子:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
list.add(300);
for(int val : list) {
System.out.println(val);
}
}
}
// 运行结果:
// 100
// 200
// 300
3、ArrayList
3.1、认识
ArrayList是一个数组队列,继承了AbstractList,实现了List接口。
我们知道数组的特点,就是容量如果在创建的时候确定了,就无法再改变了。但ArrayList类不一样,ArrayList在使用的过程中,可以随着存储需求的改变而进行扩充,可以说是一个动态修改的数组。这是ArrayList和普通数组的区别所在。另外,ArrayList类也提供了一系列简便的方法供我们使用。
备注:ArrayList类位于java.util包中,因此我们在使用ArrayList前需要先导包。语法如下。
import java.util.ArrayList;
3.2、方法
下面是ArrayList类的一些常用方法。
4、LinkedList
4.1、认识
LinkedList类与ArrayList不同,其采用链表结构来保存对象。
如果我们需要频繁向集合中插入或删除元素,则使用LinkedList类效率会更高,但缺点是LinkedList类随机访问元素的效率较低。
备注:LinkedList类位于java.util包中,因此我们在使用LinkedList前需要先导包。语法如下。
import java.util.LinkedList;
4.2、方法
5、小结
- 在List集合中,元素允许重复出现,并且各元素之间的顺序就是对象插入的顺序。事实上这种行为和数组很接近。并且每个元素都有自己的索引值(索引值从零开始),我们可以通过索引值来访问List中的各个元素。
- ArrayList类实现了动态可变的数组,其允许保存所有元素(包括null),我们可以通过元素的索引值来对其进行随机访问。但缺点在于向指定的位置插入(或者删除)对象时效率不高。
- LinkedList类采用链表结构来保存对象,当我们需要频繁插入(或者删除)对象时就可以使用
LinkedList类,此时效率较高。但对于LinkedList类来说,需要随机访问集合中的对象时,效率就不高。
6、写在最后
好了,今天就记录到这里,感谢观看。