ArrayList和LinkedList的用法区别
ArrayList查询快、增删慢 .
LinkedList查询慢、增删快 .
原因
-
ArrayList 储存元素时是按数组的存储方式 , 每添加一次元素所有元素都要移动位置(删除元素时同理).
-
访问元素时数组可以直接通过下标,获取到指定位置的元素
-
LinkedList 存储元素时是按照链表结构存储 ,每一个相邻元素都双向链接添加和删除元素时 ,更新被删除元素附近的链接即可
-
访问元素比较麻烦 ,查看链表中第n个元素,就必须从头开始,越过n-1个元素
public class TestArrayListAndLinkList {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
LinkedList<Integer> linkedList = new LinkedList<Integer>();
long start1 = System.nanoTime();
for (int i = 0; i < 20000; i++) {
arrayList.add(0,i);
}
long end1 = System.nanoTime();
long start2 = System.nanoTime();
for (int i = 0; i < 20000; i++) {
linkedList.addFirst(i);
}
long end2 = System.nanoTime();
System.out.println("ArrayList的添加元素時間:"+(end1 - start1));
System.out.println("LinkerList的添加元素時間:"+(end2 - start2)); // 测试添加元素时间 LinkedList 比 ArrayList 快
long start5 = System.nanoTime();
arrayList.get(10000);
long end5 = System.nanoTime();
long start6 = System.nanoTime();
linkedList.get(10000);
long end6 = System.nanoTime();
System.out.println("ArrayList的訪問元素時間:"+(end5 - start5));
System.out.println("LinkerList的訪問元素時間:"+(end6 - start6)); // 测试访问元素时间ArrayList 比 LinkedList 快
long start3 = System.nanoTime();
for (int i = 0; i < 20000; i++) {
arrayList.remove(0);
}
long end3 = System.nanoTime();
long start4 = System.nanoTime();
for (int i = 0; i < 20000; i++) {
linkedList.removeFirst();
}
long end4 = System.nanoTime();
System.out.println("ArrayList的刪除元素時間:"+(end3 - start3));
System.out.println("LinkerList的刪除元素時間:"+(end4 - start4)); // 测试删除元素时间LikedList 比 ArrayList 快
}
Set和List的用法区别
- List可以插入多个null元素,而Set只允许插入一个null元素;
- List容器是有序的,而Set容器是无序的;
- List方法可以允许重复的对象,而Set方法不允许重复对象等等。
Map
Map是一个集合,一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是整数。在Map中键(key)可以是任意类型的对象.Map中不能有重复的键(Key),每个键(key)都有一个对应的值(value).
LinkedHashMap的原理和HashMap的执行原理相同,其中区别较大一点的是,LinkedHashMap是有序的,而HashMap是无序的.