程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java中的數據結構(集合|容器),java數據結構

java中的數據結構(集合|容器),java數據結構

編輯:JAVA綜合教程

java中的數據結構(集合|容器),java數據結構


  對java中的數據結構做一個小小的個人總結,雖然還沒有到研究透徹jdk源碼的地步。首先、java中為何需要集合的出現?什麼需求導致。我想對於面向對象來說,對象適用於描述任何事物,所以為了方便對於對象的操作、存儲就出現了集合,集合應該是存儲對象最常用的一種方式了,相對於數組更靈活,可變長度。同時集合也只能存儲對象不能使基本數據類型。

  集合框架分為兩個派系Collection和Map而每一種集合類型都是基於特定的數據結構,Collection接口繼承了Iterable接口所以可以使用Iterable接口的iterator()方法了返回值是一個Iterator接口類型這也就是Collection集合中的迭代器,迭代器就是一種集合元素的去除方式可以直接訪問集合中的元素,它定義在集合內部就是為了更加方便的取出集合中的元素它可以取出和刪除集合中的元素(next(),remove())並且在使用迭代器操作數據的時候不可以使用集合本身的方法對集合進行操作,因為迭代器已經定義好了對於集合的後續操作迭代器操作的就不是之前定義好的集合了,這就沖突了。而它的子接口ListIterator可以對集合中的元素進行增刪改查操作(其實就是操作的集合中存儲的對象引用,並不是真正對象本身,因為集合中存儲的就是對象的引用地址)。

  Collection接口又分為List和Set接口,對應的List接口比較常用的就是ArrayList和LinkedList兩個實現類了。ArrayList類的底層數據結構(就是數據存放的方式)就是一個數組接口,它是有序的帶有角標索引的並且是可以重復的而LinkedList類底層是一個鏈表數據結構,他們判斷元素是否相同都是使用的equals方法相對於ArrayList它對於集合數據的增刪操作數據是更快的因為只需要首尾關系調整,而對於ArrayList則需要重新調整索引,所以對於大數據量的增刪操作還是LinkedList效率高一些而查詢操作ArrayList更快他們都是現成不同步的(ArrayList取代了Vector)。Set接口常用的就是HashSet和TreeSet兩個類,HashSet底層是一個哈希表的接口它無序、不可重復、線程不同步,而判斷元素是否相同使用的就是hashCode方法返回是否為0如果為0還會判斷equals方法看返回是否為true。TreeSet底層是一個二叉樹結構是一個有序的不可重復也是線程不同步的集合它保證數據唯一性的方式就是compareTo方法是否返回0,TreeSet排序集合有兩種方式:1、讓存儲的元素本身具備比較性也就是實現Comparable接口覆蓋compareTo方法。2、自定義比較器實現Comparator接口自定義compareTo方法然後把該比較器作為參數出入TreeSet的構造方法中是TreeSet初始化時就具備了比較性。

  Map接口是和Collection接口平級的接口,Map接口存儲的是一個key-value形式的映射關系所以對於需要存儲映射關系的數據首選Map,Map常用的類型有HashMap和TreeMap,HashMap底層數據結構也是哈希表是可以使用null存儲的也是線程不同步的這也就取代了HashTable的線程不同步,不可存儲null值、TreeMap底層也是二叉樹數據結構,同樣的Map的取出數據的方式都是使用entrySet()方法返回Set集合再使用迭代器取出或者是增強for循環(實現了Iterable接口的集合都可以使用foreach進行循環),entrySet返回的映射關系就是一個Map.Entry類型因為Entry其實就是定義在Map中,為什麼要這麼做呢?因為只有有了Map集合,有了鍵值對才有鍵值對的映射關系,關系屬於集合中的內部事物這個事有直接訪問集合中的元素。實際應用中我想更多的是map的嵌套。

  工具類(Collections、Arrays)Collections集合工具類就是一個操作結合的專門工具類裡面定義的都是靜態方法,可以對於List集合進行各種排序二分查找等(類比字符串操作)還可以把線程不安全的轉成線程安全的,同樣的Arrays是一個操作數組的工具類裡面定義的也都是靜態方法用於數組的各種操作(toString打印數組元素、asList轉成list等)

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved