標籤:java培訓 結構圖 vector 二叉樹 null
集合架構體繫結構
650) this.width=650;" src="http://static.oschina.net/uploads/space/2015/0714/171133_0wqx_2414224.jpg" alt="171133_0wqx_2414224.jpg" />
集合架構體繫結構圖解釋:
虛點框:代表介面,虛線框:代表抽象介面,實線框:代表實現介面的類
Collection和collections的區別:
Collection是集合類的上級介面,繼承與他的介面主要有Set 和List.
Collections是針對集合類的一個協助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、線
程安全化等操作。
Map常用子類
Hashtable:雜湊表,是同步的,不允許null鍵和null值
HashMap:雜湊表,是不同步的,允許null鍵和null值
TreeMap:二叉樹,不同步,可以對Map集合中的鍵進行排序
Collection介面常用子類Set和List:
Set:不記錄元素的儲存順序,且不允許有重複資料
List:記錄元素的儲存順序,且允許有重複資料。
ArrayList,Vector, LinkedList的儲存效能和特性
ArrayList 和Vector都是使用數組方式儲存資料,此數組元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(安全執行緒),通常效能上較ArrayList差,而LinkedList使用雙向鏈表實現儲存,按序號索引資料需要進行前向或後向遍曆,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。
ArrayList:利用數組實現,解決了數組中定長到變長,類型多樣化的問題。
Iterator:迭代器介面 方法:hasNext() 判斷迭代器中是否有值,next() 取某一個值並將指標移動到下一個單
總結:
如果涉及到堆棧,隊列等操作,應該考慮用List,對於需要快速插入,刪除元素,應該使用LinkedList,如果需要快速隨機訪問元素,應該使用ArrayList。
如果程式在單線程環境中,或者訪問僅僅在一個線程中進行,考慮非同步的類,其效率較高,如果多個線程可能同時操作一個類,應該使用同步的類。
要特別注意對雜湊表的操作,作為key的對象要正確複寫equals和hashCode方法。
盡量返回介面而非實際的類型,如返回List而非ArrayList,這樣如果以後需要將ArrayList換成LinkedList時,用戶端代碼不用改變。這就是針對抽象編程。
取ArrayList中的值:
public static void test1(){ ArrayList aList=new ArrayList(); aList.add(5); aList.add(2); aList.add(0); aList.add("我"); aList.add(‘a‘); //for迴圈取值 for (int i = 0; i < aList.size(); i++) { Object obj=aList.get(i); System.out.println(obj); } //iterator迭代器取值 Iterator it=aList.iterator(); while(it.hasNext()){ Object obj=it.next(); } //迭代器加for迴圈取值 for (Iterator iterator = aList.iterator(); iterator.hasNext();) { Object object =iterator.next(); } }
10.取Map集合中的索引值對:Key鍵用Set集合儲存,value用collection集合儲存,索引值對用Set集合儲存
public static void putElements(){ hashMap.put("huang", "ming"); hashMap.put("chao", "sheng"); hashMap.put("shi", "tian"); int size=hashMap.size(); System.out.println("size="+size); } //key set集合 public static void getKey(){ Set keyset=hashMap.keySet(); Iterator it=keyset.iterator(); while(it.hasNext()){ Object key=it.next(); System.out.println("keys="+key); } } //value collection介面 public static void getValues(){ Collection coll=hashMap.values(); Iterator it=coll.iterator(); for (Iterator iterator = coll.iterator(); iterator.hasNext();) { Object value = iterator.next(); System.out.println("values="+value); } } //key-value entrySet集合 public static void getKV(){ //方式一 增強for迴圈擷取 for(Object obj:hashMap.entrySet()){ Entry entry=(Entry) obj; Object key=entry.getKey(); Object value=entry.getValue(); System.out.println("key="+key+";value="+value); } //方式二 通過Key擷取Value for(Object obj:hashMap.keySet()){ Object key=obj; Object value=hashMap.get(obj); System.out.println("key="+key+";value="+value); } //方式三 通過內部類Entry擷取key和value Set entrySet=hashMap.entrySet(); Iterator it=entrySet.iterator(); while(it.hasNext()){ Entry entry=(Entry) it.next(); Object key=entry.getKey(); Object value=entry.getValue(); System.out.println("key="+key+";value="+value); } }
11.Stack類:
//出棧進棧 public static void test(){ Stack stack=new Stack(); stack.add("apple"); stack.add("banana"); stack.add(123); stack.add(new Date()); Iterator it=stack.iterator(); while(it.hasNext()){ Object obj=it.next(); System.out.println(obj); } //peek方法是取值,不會改變棧的大小 Object peekObj=stack.peek(); System.out.println("peekObj:"+peekObj); System.out.println("peek after:"+stack.size()); //pop方法將最後一個值彈出,棧的大小改變 Object popObj=stack.pop(); System.out.println("popObj:"+popObj); System.out.println("pop after:"+stack.size()); }
12.統計輸入的語句中每個字元的個數:
public static void countChar(){ Scanner sc=new Scanner(System.in); System.out.println("請輸入需統計的語句:"); String s=sc.next(); try { //先用GBK將字元解碼,然後用UTF-8將字串加碼。 s = new String(s.getBytes("GBK"), "utf-8"); System.out.println(s); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } char[] c=s.toCharArray(); Map<Character,Integer> map=new TreeMap<Character,Integer>(); for (int i = 0; i < c.length; i++) { if(!(map.containsKey(c[i]))){ map.put(c[i], 1); }else{ map.put(c[i], map.get(c[i])+1); } } for(Object obj:map.entrySet()){ Entry entry=(Entry) obj; Object key=entry.getKey(); Object value=entry.getValue(); System.out.println(key+"="+value); } }
本文出自 “ming” 部落格,請務必保留此出處http://8967938.blog.51cto.com/8957938/1676505
Java培訓-集合