Java编程基础之ArrayList和LinkedList的使用
先来一张菜鸟教程java集合框架介绍的大图,虽然错综复杂,但也有迹可循,本篇不该直接对上面两个实现类进行说明:
但从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
2、所以这篇就是对上面接口的实现类进行举例代码说明:先是ArrayList的实现说明:
import java.util.ArrayList;
/**
* 单列集合有Collection Collection集合常用子接口有List 和set Collection是层次结构中的根接口
List和set是子接口,List以及他的实现类 特点是可存重复元素,Set以及他的实现类 特点是不可有重复元素 List接口的实现类最常用的有Arraylist
* 特点是可存重复元素 Set接口的实现类最常用的有HashSet TreeSet 特点是不可有重复元素
*
* 双列集合有MAP,双列指的是键值对的形式存储 MAP也是个接口,java里面实现好的类有HashMap
*
* arraylist查询效率比较快,增删不建议使用arraylist。底层是用数组实现,使用下标索引查询效率高
*/
public class ArrayListDemo {
public static void main(String[] args) {
// 创建集合对象,<>里面定义数据类型,new 对象的大小:如果知道就指定,资源不浪费,如果不知道就为空
ArrayList<String> cars = new ArrayList<String>();
// 往集合里面添加元素
cars.add("hello");
cars.add("world");
// 获取集合的大小元素个数
int size = cars.size();
// for循环遍历集合元素,
for (int i = 0; i < cars.size(); i++) {
// get()获取集合的元素
System.out.println(i + "索引位的元素:" + cars.get(i));
}
// 可以使用高级for,只是不知道索引
for (String car : cars) {
System.out.println(car);
}
// remove移除集合元素
cars.remove(size - 1);
System.out.println("演示一下移除元素:");
for (String car : cars) {
System.out.println(car);
}
}
}
再说LinkedList类的说明:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class LinkedListDemo {
/**
* ArrayList {0,1,2,3,4,5,6},如果从最后的位置增删的话,用ArrayList比较快 LinkedList
* 如果从最开始的位置增删的话,用linkedList 比较快 数据量小,ArrayList和LinkedList的方法没有多大差别
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 创建集合对象,<>里面定义数据类型,new 对象的大小:如果知道就指定,资源不浪费,如果不知道就为空
LinkedList<String> cars = new LinkedList<String>();
// 往集合里面添加元素
cars.add("hello");
cars.add("world");
// 获取集合的大小元素个数
int size = cars.size();
// for循环遍历集合元素,
for (int i = 0; i < cars.size(); i++) {
// get()获取集合的元素
System.out.println(i + "索引位的元素:" + cars.get(i));
}
// 可以使用高级for,只是不知道索引
for (String car : cars) {
System.out.println(car);
}
// remove移除集合元素
cars.remove(size - 1);
System.out.println("演示一下移除元素:");
for (String car : cars) {
System.out.println(car);
}
// list对象储存的数据类型是integer
List<Integer> llist = new LinkedList<Integer>();
List<Integer> alist = new ArrayList<Integer>();
// 另一个add增加元素的方法,给指定索引位置增加元素
llist.add(1, 123);
}
}
最后比较两者的在同一场景下的执行效率:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class CompareListDemo {
// 测试ArrayList和LinkedList两个类实现List接口的性能比较
public static void runDuration(List<Integer> list, String listType) {
System.out.println("\n duration方法的开始,用的集合是:" + listType);
for (int i = 0; i < 100000; i++) {
list.add(i);
}
int size = list.size();
int elementToAdd = size + 100000;
long startTime = System.currentTimeMillis();
for (int i = size; i < elementToAdd; i++) {
list.add(i);
// list.add(0, i);
}
// for (int i = 90000; i < 92000; i++) {
// list.remove(i);
// }
//
// for (int i = 0; i < 100; i++) {
// list.remove(i);
// }
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
System.out.println("集合" + listType + "用时为" + duration + "毫秒");
}
public static void main(String[] args) {
List<Integer> llist = new LinkedList<Integer>();
List<Integer> alist = new ArrayList<Integer>();
runDuration(alist, "ArrayList");
runDuration(llist, "LinkedList");
}
}
3、因为很多时候,搜索到关键信息的人,从不看代码外的文字说明,直接盯着代码看或拷贝出来调试结果,所以我这上面直接上了三份代码,有兴趣的同学可以拿去直接测试。