Java學習之==>集合體系(待續。。)

1、概述算法

Java的集合體系,本質上是一個陳放數據的容器,像以前學過的數組也是陳放數據的容器,但在 Java 中數組的長度是固定的,使用起來沒那麼方便。集合提供了更增強大的功能,使用起來也更方便和快捷。集合體系中提供的方法的底層源代碼採用的也是優秀的高效率算法,其餘數據容器能操做的,集合都能操做,並且代碼更加簡潔,思路更加清晰,運行的效率更加高。所以,徹底掌握完集合。編程的技能會進一步提升。編程

2、集合體系數組

集合做爲一個容器,能夠存儲多個元素,可是因爲數據結構的不一樣,Java 提供了多種集合類,將集合類中共性的功能不斷向上抽取,最終造成了集合體繫結構。安全

Java中集合體系的關係圖:數據結構

Collection:多線程

Map:ide

  • List、Set、Map 都是接口,List 和 Set 繼承自 Collection 接口,Map 爲獨立接口;
  • AbstractCollection 做爲 AbstractList、HashSet、TreeSet 的父類,實現自 Collection;
  • Set下有 HashSet、TreeSet、LinkedHashSet,LinkedHashSet 繼承自 HashSet,實現自 Set,HashSet、TreeSet繼承自 AbstractCollection 實現自Set;
  • List下有ArrayList、LinkedList、Vector,這三者繼承自 AbstractList,而 AbstractList 繼承自 AbstractCollection,實現自 List;
  • Map下有 AbstractMap、HashMap、TreeMap、LinkedHashMap;

3、Collection體系性能

一、Collection測試

  • 常見的方法有:add()、clear()、contains()、remove()等方法;
  • 從 Iterable 接口繼承了 iterator() 和 splititerator() 方法;
  • 重要實現接口爲 List、Set 和 Queue;

二、Listspa

存儲特色:

  • 有序;
  • 可重複;

重要實現類:

  • ArrayList
  • LinkedList 

三、LinkedList

數據結構:

  • List是描述有序集合;
  • LinkedList是內部使用鏈表來實現的有序集合;

體系機構圖:

四、ArrayList

數據結構

  • List是描述有序集合;
  • ArrayList是內部使用數組實現的有序集合;

體系結構圖

ArrayList VS LinkedList

  • 使用徹底一致,由於實現自相同的接口List;
  • 場景略有區別(這一點不許確):?
    • ArrayList適合隨機地操做(get,set)列表每一個元素(數組的特性)的場景?;
    • LinkedList適合插入和刪除比較頻繁的場景?;

ArrayList VS Vector

  • 內部實現基本一致,略微差別不過是我的的一些寫法問題;
  • Vector是線程安全的,ArrayList是非線程安全的,在無線程安全須要的狀況下,使用ArrayList;
  • 注: 通常列表的操做,多數是在線程內操做,所以涉及多線程的場景不是不少;

ArrayList 與 LinkedList 性能測試

咱們先來寫下面一段測試代碼:

/** * 自測下ArrayList與LinkedList在本地的機器上的性能 * * 主要是驗證 LinkedList是否是全部數據都是刪除和修改最快 * */
public class Topic1 { public static void main(String[] args) { List<Integer> list1 = new ArrayList<>(); long start = System.currentTimeMillis(); for (int i=0;i<=10000;i++){ list1.add(i); } long end = System.currentTimeMillis(); System.out.println("arraylist time:" + (end - start)); List<Integer> list2 = new LinkedList<>(); long start1 = System.currentTimeMillis(); for (int i=0;i<=10000;i++){ list2.add(i); } long end1 = System.currentTimeMillis(); System.out.println("linkedList time:" + (end1 - start1)); }
測試代碼

咱們分別測試往 ArrayList 和 LinkedList 中添加 1萬、10萬、80萬、100萬條數據,查看其執行時間,運行結果以下:

到80萬條數據時,ArrayList 用時已經比 LinkedList 少,只不過這時時間還比較接近。

以上結果分別表明1萬、10萬、80萬、100萬條數據的測試結果,到100萬條數據時,ArrayList 所用時間遠遠少於 LinkedList。

因此,咱們說LinkedList適合插入和刪除比較頻繁的場景是不許確的,和數據量的大小有關。

4、Set

存儲特色:

  • 無序;
  • 不可重複;

重要實現類:

  • HashSet;
  • LinkedHashSet;

一、HashSet

數據結構:

  • 散列集;

體系結構圖:

二、LinkedHashSet

數據結構:

  • 散列集;

體系結構圖:

5、Map

重要實現類

  • HashMap;
  • LinkedHashMap;
  • TreeMap;

Map體系結構圖

 

未完待續。。。

相關文章
相關標籤/搜索