|
Stack |
ArrayList |
LinkedList |
HashMap |
HashSet |
Queue |
添加元素 |
push |
add, addAll |
add, addAll |
put |
add |
offer |
删除元素 |
pop |
remove |
remove |
remove |
remove |
poll |
查看第一个元素 |
peek |
|
|
|
|
peek |
查看指定元素 |
|
get |
get |
get |
|
|
修改元素 |
|
set |
set |
replace,put |
|
|
大小 |
size |
size |
size |
size |
size |
size |
判断元素是否存在 |
search |
contains |
contains |
containsKey,containsValue |
contains |
|
是否为空 |
empty |
isEmpty |
isEmpty |
isEmpty |
|
|
线程安全 |
是 |
否 |
否 |
否 |
否 |
|
初始化:
1 2 3 4 5 6 7
| Stack<Object> var=new Stack<>(); ArrayList<Object> var=new ArrayList<>(); LinkedList<Object> var=new LinkedList<>(); HashSet<Object> var=new HashSet<>();
Queue<Object> var=new LinkedList<>(); HashMap<Key,Value> var=new HashMap<>();
|
Stack
List
ArrayList
1 2 3 4 5 6 7
| add(value) add(index,value) addAll(index,collection) remove(index) get(index) set(index,value) size()
|
LinkedList
同ArrayList
Vector
线程安全的ArrayList
Map
HashMap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| HashMap<Key, Value> Sites = new HashMap<Key, Value>(); Sites.put(Key,Value); Sites.get(Key); Sites.remove(Key); Sites.clear(); Sites.size(); Sites.getOrDefault(Key,defaultvalue);
for (Integer i : Sites.keySet()) { System.out.println("key: " + i + " value: " + Sites.get(i)); }
for(String value: Sites.values()) { System.out.print(value + ", "); }
|
LinkedHashMap
- HashMap+双向链表
- 头部是最久远的节点,尾部是最新的节点
- 布尔变量
accessOrder
决定get
和put
函数调用后是否把节点放在尾部,具体实现在afterNodeAccess
函数里
1 2 3 4
| for(Entry<String,Integer> entry:seqMap.entrySet()){ System.out.println(entry.getKey()+" "+entry.getValue()); }
|
支持两种顺序插入顺序 、 访问顺序
- 插入顺序:先添加的在前面,后添加的在后面。修改操作不影响顺序
- 访问顺序:所谓访问指的是get/put操作,对一个键执行get/put操作后,其对应的键值对会移动到链表末尾,所以最末尾的是最近访问的,最开始的是最久没有被访问的,这就是访问顺序。
1 2
| public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder);
|
实现LRU:最久没访问的放在队头,最近访问的放在队尾
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class LRUCache extends LinkedHashMap<Integer, Integer>{ private int capacity;
public LRUCache(int capacity) { super(capacity, 0.75F, true); this.capacity = capacity; }
public int get(int key) { return super.getOrDefault(key, -1); }
public void put(int key, int value) { super.put(key, value); }
@Override protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) { return size() > capacity; } }
|
HashTable
线程安全,弃用了
TreeMap
默认按照key排序
1 2 3 4 5 6 7 8 9 10 11 12
| TreeMap<Integer, String> treeMap = new TreeMap<>(); TreeMap<Integer, String> map = new TreeMap<>(Comparator.reverseOrder());
treeMap.firstKey(); treeMap.lastKey(); treeMap.subMap(fromKey,toKey);
for (Map.Entry entry : treeMap.entrySet()) { System.out.println(entry); }
|
Set
HashSet
源码实现是HashMap的一个实例
1 2 3 4 5
| HashSet<String> sites = new HashSet<String>(); sites.add("Google"); sites.contains("Taobao"); sites.remove("Taobao"); sites.size();
|
LinkedHashSet
源码实现是LinkedHashMap的一个实例
TreeSet
源码实现是TreeMap的一个实例
有序唯一
Queue
PriorityQueue
默认小顶堆。myPQ第一个是最小的那个数。
1 2 3
| Queue<Integer> myPQ = new PriorityQueue<>(); myPQ.offer(1); myPQ.poll();
|
创建自定义优先级:创建一个Comparator
对象并重写compare
方法,返回负数表示前者更优先。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import java.util.*; class Untitled { public static void main(String[] args) { Queue<Integer> myPQ = new PriorityQueue<>(newCp); myPQ.offer(3); myPQ.offer(2); myPQ.offer(1); myPQ.offer(4); System.out.println(myPQ.poll()); System.out.println(myPQ.poll()); System.out.println(myPQ.poll()); System.out.println(myPQ.poll()); } public static Comparator<Integer> newCp = new Comparator<Integer>(){ @Override public int compare(Integer c1, Integer c2) { return (int)(c2-c1); } }; }
|
Deque
双端队列,更多参考这里
1 2 3 4 5 6 7 8 9
| Deque<Integer> path=new LinkedList<>(); Deque<Integer> path=new ArrayDeque<>();
offerFirst(E e); offerLast(E e); pollFirst(); pollLast(); getFirst(); getLast();
|
Collections
reverse
sort
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Comparator<Integer> cmp=new Comparator<Integer>(){ @Override public int compare(Integer a, Integer b){ return b-a; } };
Comparator<String> myCmp=new Comparator<String>(){ @Override public int compare(String a,String b){ return a.compareTo(b); } };
|
集合转换
数组和List
Queue和List
1 2 3
| Deque<Integer> path=new ArrayDeque<>();
ArrayList<Integer> tmp=new ArrayList<>(path);
|