1、List接口的实现类
List接口的实现类最常用的有ArrayList和LinkedList、Vector
ArrayList: 实现了可变的数组,可以根据索引位置对集合进行快速的随机访问。
LinkedList: 采用链表结构保存对象,便于向集合中插入和删除对象,但是如果将元素插入到集合的尾部,其实ArrayList原比LinkedList快。
Vector: 也是List的一个常见实现类,但是在该类中的大多数方法都加了synchronized关键字,因此相比ArrayList、LinkedList集合在多线程访问时是线程的安全的。
2 、Set接口的实现类
Set接口的实现类常用的有HashSet和TreeSet、LinkedHashSet。它们的元素都不可重复。
HashSet:底层是哈希表,遍历元素和添加顺序、大小顺序无关。
TreeSet:底层是红黑树,元素按照大小顺序存储和遍历。
LinkedHashSet:底层是哈希表+双链表,遍历元素可以体现添加时顺序。顺序性是体现和HashSet不同之处。
3、Map接口的实现类
Map接口的实现类常用的有HashMap、LinkedHashMap和TreeMap。它们的key都不可重复。这里面的key不可重复 ,指的是容器中对于同一个Key只会存在一个。
HashMap:哈希表,底层是数组+链表+红黑树。遍历元素和添加顺序、大小顺序无关。
LinkedHashMap:哈希表+双链表,遍历元素可以体现添加顺序。
TreeMap:红黑树,元素按照key大小顺序存储和遍历。
例子(example):
package se.collect.map;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class MapDemo1 {
public static void main(String[] args) {
System.out.println("input 1 : 1 3 : 3 2 : 2 4 : 4 5 : 5");
//HashMap
Map<String, String> hashMap = new HashMap<String, String>();
hashMap.put("1", "1");
hashMap.put("3", "3");
hashMap.put("2", "2");
hashMap.put("4", "4");
hashMap.put("5", "5");
System.out.print("HashMap ");
for (String key : hashMap.keySet()) {
System.out.print(key + " : " + hashMap.get(key) + " ");
}
System.out.println();
//LinkedHashMap
Map<String, String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("1", "1");
linkedHashMap.put("3", "3");
linkedHashMap.put("2", "2");
linkedHashMap.put("4", "4");
linkedHashMap.put("5", "5");
System.out.print("LinkedHashMap ");
for (String key : linkedHashMap.keySet()) {
System.out.print(key + " : " + linkedHashMap.get(key) + " ");
}
System.out.println();
//TreeMap
Map<String, String> treeMap = new TreeMap<String, String>();
treeMap.put("1", "1");
treeMap.put("3", "3");
treeMap.put("2", "2");
treeMap.put("4", "4");
treeMap.put("5", "5");
System.out.print("TreeMap ");
for (String key : treeMap.keySet()) {
System.out.print(key + " : " + treeMap.get(key) + " ");
}
System.out.println();
}
}