一.List集合
1.List用法:
- List是用于有序存储可重复元素的集合。List包括List接口以及List接口的所有实现类,因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法。
- 它是声明有序存储对象(可重复)功能的公共接口。List集合中只能存储引用数据类型,不能存储基本数据类型。
- 在Java中,List接口是一个有序的集合,它允许我们按顺序存储和访问元素。它扩展了集合接口。
2.List集合中常用的的方法有:
-
add(Object element) - 向列表末尾追加一个对象
-
void add(int index,Object element),在指定位置index上插入元素element。
-
addAll() - 将一个列表的所有元素添加到另一个
-
get() - 有助于从列表中随机访问元素
-
iterator() - 返回迭代器对象,该对象可用于顺序访问列表的元素
-
set() - 更改列表的元素
-
remove() - 从列表中删除一个元素
-
removeAll() - 从列表中删除所有元素
-
clear() - 从列表中删除所有元素(比removeAll()效率更高)
-
size() - 返回列表的长度
-
toArray() - 将列表转换为数组
-
contains() - 如果列表包含指定的元素,则返回true
3.List集合的实现类有ArrayList 和LinkedList.
在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为ArrayList或LinkedList.例如:
List<String> l = new ArrayList<String>(); // 利用ArrayList类实例化List集合
List<String> l2 = new LinkedList<String>(); // 利用LinkedList类实例化List集合
List接口的常用举例:
class Example1{
public static void main(String[] args) {
String a = "A", b = "B", c = "C", d = "D", e = "E";
List<String> list = new LinkedList<String>();
list.add(a);
list.add(e);
list.add(d);
list.set(1, b); // 将索引位置为1的对象e修改为对象b
list.add(2, c); // 将对象c添加到索引位置为2的位置
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
在控制台将输出如下信息:
A
B
C
D
二.ArrayList类
ArrayList是一个可以处理变长数组的类型,它是一个泛型类,可以存放任意类型的对象。顾名思义,ArrayList是一个数组列表,因此其内部是使用一个数组来存放对象的。
1.ArrayList类常用的方法:
-
add()
-
get()
-
remove()
-
clear()
-
sort()
-
toArray()
-
toString()等。
2. 利用ArrayList实现了List接口,ArrayList可以使用List接口常用方法。
class Example2{
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
System.out.println("arrayList的元素为:"+arrayList);
arrayList.set(0,"c"); //将索引为0的位置对象a修改为对象c
System.out.println("arrayList的元素为"+arrayList);
arrayList.add(1,"e"); //将对象e添加到索引为1的位置
System.out.print("arrayList的元素为:");
for (int i=0;i<arrayList.size();i++){
System.out.print(arrayList.get(i));//for循环迭代arrayList集合元素
}
System.out.println("");
System.out.println("arrayList指定元素c位置的索引为"+arrayList.indexOf("c"));
//返回列表中指定元素c位置的索引
System.out.println("arrayList指定元素c最后位置的索引为"+arrayList.lastIndexOf("c"));
//返回列表中指定元素c最后位置的索引
System.out.println("arrayList的指定区域为"+arrayList.subList(1,2));
//返回列表中指返回一个指定区域的List集合对象[1,2)
}
}
编译和运行后的结果为:
arrayList的元素为:[a, b, c]
arrayList的元素为 :[c, b, c]
arrayList的元素为: cebc
arrayList指定元素 c位置的索引为 0
arrayList指定元素c最后位置的索引为 3
arrayList的指定区域为 [e]
3 .LinkedList类
- LinkedList在实现中采用链表数据结构,相比于ArrayList,LinkedList访问速度较慢,但插入和删除熟读块,主要原因在于插入和删除元素时,只需要修改相应的链接位置,不需要移动大量的元素。
- LinkedList 可以看成一个双链表,所有的操作都可以认为是一个双链表的操作,因为它实现了Deque接口和List接口。
1. LinkedList类的常用方法举例
public class Example3 {
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
linkedList.add("a");
linkedList.add("b");
linkedList.add("c");
linkedList.add("d");
//获得并输入列表开头的对象
System.out.println("列表开头元素为:"+linkedList.getFirst()+"列表结尾元素为:"+linkedList.getLast());
linkedList.addFirst("rr"); //向列表开头添加一个对象
System.out.println("列表中所有元素:"+linkedList);
linkedList.removeLast();//移除列表结尾元素
System.out.println("列表结尾元素为:"+linkedList.getLast());
//获取并输出列表结尾的对象
}
}
编译和运行后的结果为:
列表开头元素为:a列表结尾元素为:d
列表中所有元素:[rr, a, b, c, d]
列表结尾元素为:c