版权声明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_43821974/article/details/84900196
Collection 架構
- List 允許重複的有序集合,如:
ArrayList
、LinkedList
。ArrayList
訪問速度快,但是向 List 中間插入或刪除元素的速度慢。LinkedList
訪問速度慢,但是向 List 中間插入或刪除元素的速度快。
P.S. 當操作的陣列頻繁使用查詢,則使用ArrayList
,若需要頻繁的從前面或中間添加數據就使用LinkedList
。
- Set 集合中的物件不按特定的方式排序且無重複物件。,如:
HashSet
、TreeSet
。HashSet
按照哈希算法來存取集合中的物件,存取速度較快。TreeSet
能夠對集合中的物件進行排序。
P.S. 不同之處在於,像 add,remove,contains,size …等操作,HashSet 比TreeSet 有更好的性能。
- Queue 順序存取的結構,依照先進先出的原則來存取的佇列 (FIFO),如:
ArrayDeque
,PriorityQueue
。ArrayDeque
因為實現了 Deque 接口,可以在隊列頭部和尾部進行操作。PriorityQueue
每次從隊列中取出的是最高優先權的元素,若沒有提供 Comparator ,優先對列中元素默認為自然順序。
- 有序:取出和存入的顺序一致。
- 無序:取出和存入的顺序不一致。
List
private int testCount = 100000;
private void addMethod(List list) {
// 取得 Class Name
String className = getClassSimpleName(list);
long startTime = getCurTimeMills();
for (int i = 0; i < testCount; i++) {
list.add(0, i);
}
printIntervalTimeMillis(startTime, className, "Add");
}
ArrayList–Add–執行時間 : 977
LinkedList–Add–執行時間 : 6
private void getMethod(List list) {
// 取得 Class Name
String className = getClassSimpleName(list);
long startTime = getCurTimeMills();
for (int i = 0; i < testCount; i++) {
list.get(i);
}
printIntervalTimeMillis(startTime, className, "Get");
}
ArrayList–Get–執行時間 : 7
LinkedList–Get–執行時間 : 3419
private void removeMethod(List list) {
// 取得 Class Name
String className = getClassSimpleName(list);
long startTime = getCurTimeMills();
for (int i = 0; i < testCount; i++) {
list.remove(0);
}
printIntervalTimeMillis(startTime, className, "Remove");
}
ArrayList–Remove–執行時間 : 529
LinkedList–Remove–執行時間 : 5
通用方法:
// 打印執行時間
private void printIntervalTimeMillis(long startTime, String className, String methodName) {
System.out.println(className + "--" + methodName + "--" + "執行時間 : " + (getCurTimeMills() - startTime));
}
// 取得當前系統時間
private long getCurTimeMills() {
return System.currentTimeMillis();
}
private String getClassSimpleName(List list) {
return list.getClass().getSimpleName();
}
Set
暫時沒有寫,對此還不熟悉。
Queue
先進先出 ( First - In - First - Out, FIFO) 的排程
- enqueue :將資料放入佇列尾端。
P.S. C++ 用 push,JAVA 用 offer。 - dequeue:取出佇列前端的資料。
P.S. C++ 用 pop,JAVA 用 poll。