首頁  >  文章  >  Java  >  集合常用實作類別有什麼差別?

集合常用實作類別有什麼差別?

零下一度
零下一度原創
2017-06-25 10:32:355802瀏覽

1.集合是什麼

#集合就是物件導向可重複使用性的體現,一般地,我們把研究對象統稱為元素;把一些元素組成的總體叫做集合,也簡稱集。

2.集合元素的特徵

#(1)確定性:設A為給定的集合,x是某一個具體對象,則或者是A的元素,或者不是A的元素,兩種情況必有一種且只有一種成立. (2)互異性:一個給定集合中的元素,指屬於這個集合的互不相同的個體(對象),因此,同一集合中不應重複出現同一元素. (3)無序性:一般不考慮元素之間的順序,但在表示數列之類的特殊集合時,通常會依照習慣的由小到大的數軸順序書寫

#collection 集合實作類別

##ArrayList 實作方法:陣列實作  版本:1.2  時間:98年12月發布輕量級(運作快) 執行緒不安全感(常用)
Vector     實作方法:陣列實作  版本:1.0  時間:95年5月發佈   重量級(運轉慢) 執行緒安全性
LinkedList 實作方法: 鍊錶實作 
#LinkedList 實作方法: 鍊錶實作  #LinkedList 實作方法: 鍊錶實作 
#LinkedList 實作方法: 鍊錶實作 

##數組:空間連續 查詢速度快  直接訪問下標                  增加刪除慢增刪需要將後面的數據向後移或向前移

鍊錶:節點關聯  查詢速度慢  透過上一個去尋找下一個    增加刪除快鍊錶增加直接將上一個指向新資料下一個也指向新資料

Vector實現類別Stack  堆疊LIFO(Last In First Out)查詢少增刪多

#3.如何用java實作一個堆疊

#a.陣列  b.LinkedList  c.Stack類別

#用LinkedList,為什麼不用Stack實作類別呢因為Stack繼承錯誤的繼承了Vector Vector提供了add方法,但堆疊只能pop和push無法從中間插入,讓堆疊不夠安全。 Stack繼承了Vector讓Statck存在很多不應該存在的方法。

 

 1 //用java创建一个栈 2 public class AStack { 3 public static void main(String[] args) { 4     Stacks s = new Stacks(); 5     s.push("lin"); 6     s.push("hello"); 7     s.push("hou"); 8     s.push(123); 9     System.out.println(s.pop());10     System.out.println(s.pop());11     System.out.println(s.pop());12     System.out.println(s.pop());13 }14 }15 class Stacks{16     //变继承复用为主核复用17     private LinkedList list = new LinkedList();18     public void push(Object o){19         list.addFirst(o);20     }21     public  Object pop(){22         Object o = list.removeFirst();23         return o;24     }25 }
Map集合

元素:key - value 對(鍵值對)

特點:key 內容唯一不可重複key所對應的

##value是可重複的無序用法:透過key找value

範例:字典單字-解釋

網站使用者名稱-密碼

# 主要方法:

1.put(Object k,Object v):把k-v這個鍵值對放入Map 若k已存在那麼新v會取代舊v

2.get(Object k):傳回Map中k對應的v

#3.remove(Objeck k):刪除k所在的鍵值對

4.containsKey(Object k):判斷Map中是否有K存在 

5.containsValue(Object v):判斷Map中是否有v存在 

#Map3種的遍歷

################################## #######1.值遍歷############
1   Collection c = map.values();2    Iterator i =  c.iterator();3      while(i.hasNext()){4        System.out.println(i.next());5     }
#############2.鍵遍歷############################################## ## ######
1         Set s = map.keySet();2         Iterator i =  s.iterator();3         while(i.hasNext()){4             Object k = i.next();5             Object v = map.get(k);6             System.out.println(k+"+++"+v);7         }
############3.鍵值遍歷###################Map.Entry對象,封裝了一個key和一個value############
1      Set set = map.entrySet();2         Iterator i = set.iterator();3         while(i.hasNext()){4             Map.Entry me = (Map.Entry)i.next();5             System.out.println(me.getKey());6             System.out.println(me.getValue());7         }
###

實作類別:

1.HashMap  :1.2 允許用null當key或value

#2.Hashtable :1.0 不允許null當key或value
3.Properties:Hashtable的子類別key和value都是String 一般用於設定檔的讀取

4.TreeMap:實作了SortcdMap(Map的子介面)自動對key排序

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------ 以上有寫的不對的歡迎大神指點錯誤,有想交流的請發郵件到我的郵箱1206835721@qq.com

以上是集合常用實作類別有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn