前言(转载请说明作者:极客BOY)
-
2020.5.14
发布
任务导引
开发一款电话号码管理程序,具有电话号码的添加、删除、修改和查询的功能。
List接口
特点
-
有序的
有序并不是排好了序,而是按照素放进去的顺序读取,并不是散乱的排布。
-
可重复的
允许有相同的元素存在。
如何使用
我们知道,接口不能被实例化,所以,我们需要它的子类,根据 List的子类来实例化。
下面介绍的是List接口的实现子类
ArrayList
ArrayList即数组实现
ArrayList使用数组作为实现结构,但是元素个数不受限制,是大小可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率高,但是任何不在结尾处增加元素或删除元素的操作都会引起大量元素的移位。
e.g.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListDemo1 {
public static void main(String[] args) {
// 建立列表,默认元素数:10
List<String> list = new ArrayList<String>();
System.out.println("添加元素……");
// 在末尾添加
list.add("BASIC");
list.add("C");
list.add("Python");
list.add("Java");
System.out.println("在2下标前插入");
list.add(2, "C++");
System.out.println(list);
list.set(0, "Ada");
System.out.println(list.get(3));
System.out.println("用下标遍历列表:");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
}
}
LinkedList
LinkedList即链表,采用链式存储结构, 插入、删除元素时不会引起大量元素的移动,效率高。它专门提供了对尾部和头部添加和删除的操作方法,而且效率很高。
e.g. 在头尾添加字符串
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
System.out.println("添加元素……");
list.add("BASIC");
list.add("C");
list.addFirst("Python");
list.addLast("Java");
System.out
.println("链表头:" + list.getFirst() + "\n链表尾:" + list.getLast());
for (String string : list) {
System.out.println(string);
}
}
}
List排序
按照你的想法,你认为排序方法可能在List接口中有这个方法,但是事实并没有。
但我们可以注意到下图的Java集合框架图结构图中可以看到右下角有个Utilities
它里面包含了sort
方法,可以进行排序,前提是List集合中包含的数据类型中,是实现Comparable
的类的实例。