java之集合基礎
阿新 • • 發佈:2018-12-26
一、、為何使用類集框架?
java中有物件,物件需要存放,要進行讀取,要傳遞。起先通過陣列,物件陣列來傳遞,但是陣列有很大的弊端不能存放動態的東西,就是說很多物件的多少不是固定不變的。所以用連結串列來存放。但是連結串列開發難度大;效能低下;所以java1.2的時候就開發了類集框架,方便開發者的使用,起初是用所有類集框架都是用object作為返回值,需要使用向下轉型,會帶來安全隱患。1.5提出泛型。故現在類集中都用泛型,有些地方不用會提示警告。
二、藉此機會,再一次瞭解轉型的意義?
向上轉型: 統一引數; 程式碼更簡潔
統一引數:是說在呼叫被覆寫的方法時,用到的引數為父類物件,而不再是每個子類的物件。
向上轉之後,父類只能訪問覆寫過的方法,父類不能訪問到子類中其他的方法,為了解決這個問題。
三、再回顧下集合中的精華。
一、單物件最大的介面
Collection<E>
較為重要方法 add() iterator:例項化它的父類iterator
它的子介面有倆個。為List, Set
List子介面 :物件可以重複。
1.子類:ArrayList 陣列實現,查詢快,插入,刪除慢
擴充的方法 get(index); set(index, element); listIterator();
擴充的方法主要是方便讀取寫入單個的元素。次要的是為了實現了迭代的子介面。lsitIterator()是Iterator的子介面。那麼就可以在list物件中直接建立迭代器了,用hasNext()來判斷
2.LinkedList子類: 用連結串列實現,查詢慢,插入,刪除快 。雙向連結串列。
3.Vector子類:出現比較早,採用執行緒同步,比較安全。用的不多。也是陣列實現。
Set子介面:元素不能重複
並沒有對父介面進行擴充,簡單的繼承。當然也無法使用get()之類
常用的子類:HashSet,TreeSet
HashSet子類:雜湊存放
Hash演算法:用二進位制計算結果來設定儲存位置,當然無序,但是查詢比較快。
TreeSet子類:進行排序
要和比較器 compareTo結合使用。用法就是,實體類需要繼承compareTo,
這裡關於 重複元素的消除,和比較規則,我還會再操作中寫到具體程式碼操作。
二、雙物件的介面Map
HashMap子類
常用方法:Put(key,value); 如果key值重複,值會替代
get(key)
Set<> entrySet():將map轉換為set集合,主要用來迭代Map,很必須
Set< > keySet(): 取出全部的key
Hashtable子類 用的不多。採用執行緒同步,不允許key-value為null
集合的特點說完了
四、下來是集合的輸入操作:
單物件的輸出
有4中操作: Iterator.class ListIterator, foreach. Enumeration. 我只用過for? enum連見都沒見過。。
1。Iterator
Collection可是繼承了Iterator介面的,我去,介面中就一個方法Iterator(),
這個方法最火!用法:集合名.hasNext()?next():null;
2。ListIterator
一看就是人家的子介面
它可以向前迭代。提供了hasPrevious().和previous() 意思是 : 有沒有?取出來
3. for簡單
for(String string :listname) {
System.out.println(string);
}
4. Enumeration列舉輸出。太不重要了,不管了。
1.陣列Array和集合ArrayList區別? 長度固定不固定問題;
2. Collection是用來輸出的,而map是用來查詢的?
hashMap集合採用了hash演算法,查詢速度快。我還要了解下hash實現,還不會。
java中有物件,物件需要存放,要進行讀取,要傳遞。起先通過陣列,物件陣列來傳遞,但是陣列有很大的弊端不能存放動態的東西,就是說很多物件的多少不是固定不變的。所以用連結串列來存放。但是連結串列開發難度大;效能低下;所以java1.2的時候就開發了類集框架,方便開發者的使用,起初是用所有類集框架都是用object作為返回值,需要使用向下轉型,會帶來安全隱患。1.5提出泛型。故現在類集中都用泛型,有些地方不用會提示警告。
二、藉此機會,再一次瞭解轉型的意義?
向上轉型: 統一引數; 程式碼更簡潔
統一引數:是說在呼叫被覆寫的方法時,用到的引數為父類物件,而不再是每個子類的物件。
轉型首先是建立在繼承和過載/覆寫的基礎上的。
example:
向下轉型:執行子類的個性化方法。example: class Car{ run() { System.out.println("父類的run()"); } } class Bmw extends Car{ run(){寶馬的run} } class dazhong extends Car() { run(){大眾的run} } //這是用向上轉型實現 main{ show(Car car){ car.run(); } show(new bmw);//相當於 car =bmw; show(new dahong); } //如果不用呢? main { show(new Bmw); show(new dazhong); } show(dazhong) { dazhong.run(); dazhong1.其他方法 } show(bmw){ bmw.run(); } //如果有n個子類,那將需要給每個子類寫一個 物件.方法 的方法。程式碼會很不簡潔。
向上轉之後,父類只能訪問覆寫過的方法,父類不能訪問到子類中其他的方法,為了解決這個問題。
三、再回顧下集合中的精華。
一、單物件最大的介面
Collection<E>
較為重要方法 add() iterator:例項化它的父類iterator
它的子介面有倆個。為List, Set
List子介面 :物件可以重複。
1.子類:ArrayList 陣列實現,查詢快,插入,刪除慢
擴充的方法 get(index); set(index, element); listIterator();
擴充的方法主要是方便讀取寫入單個的元素。次要的是為了實現了迭代的子介面。lsitIterator()是Iterator的子介面。那麼就可以在list物件中直接建立迭代器了,用hasNext()來判斷
2.LinkedList子類: 用連結串列實現,查詢慢,插入,刪除快 。雙向連結串列。
3.Vector子類:出現比較早,採用執行緒同步,比較安全。用的不多。也是陣列實現。
Set子介面:元素不能重複
並沒有對父介面進行擴充,簡單的繼承。當然也無法使用get()之類
常用的子類:HashSet,TreeSet
HashSet子類:雜湊存放
Hash演算法:用二進位制計算結果來設定儲存位置,當然無序,但是查詢比較快。
TreeSet子類:進行排序
要和比較器 compareTo結合使用。用法就是,實體類需要繼承compareTo,
這裡關於 重複元素的消除,和比較規則,我還會再操作中寫到具體程式碼操作。
二、雙物件的介面Map
HashMap子類
資料格式為:key-value。類的型別解僱為 <map,entry>
特別的是,這倆部分都是一個集合,可以分別取得。得轉換為iterator物件才能分別以list輸出。
它們允許同時為null常用方法:Put(key,value); 如果key值重複,值會替代
get(key)
Set<> entrySet():將map轉換為set集合,主要用來迭代Map,很必須
Set< > keySet(): 取出全部的key
Hashtable子類 用的不多。採用執行緒同步,不允許key-value為null
集合的特點說完了
四、下來是集合的輸入操作:
單物件的輸出
有4中操作: Iterator.class ListIterator, foreach. Enumeration. 我只用過for? enum連見都沒見過。。
1。Iterator
Collection可是繼承了Iterator介面的,我去,介面中就一個方法Iterator(),
這個方法最火!用法:集合名.hasNext()?next():null;
2。ListIterator
一看就是人家的子介面
它可以向前迭代。提供了hasPrevious().和previous() 意思是 : 有沒有?取出來
3. for簡單
for(String string :listname) {
System.out.println(string);
}
4. Enumeration列舉輸出。太不重要了,不管了。
雙物件集合的輸出:也是迭代輸出
public class IteratorMap {
public IteratorMap() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Map <String ,Integer>map=new Hashtable<String ,Integer>();
map.put("書",20);
map.put("電腦",100);
map.put("床",24);
//Map的類結構為<Map,Entry>
//map轉換為同類型的set
Set<Map.Entry<String, Integer>> set=map.entrySet();
//set轉圜為iterator介面例項
Iterator<Map.Entry<String, Integer>> iterator=set.iterator();
//取得迭代內容
while(iterator.hasNext()) {
Map.Entry<String, Integer> mEntry=iterator.next();
System.out.println(mEntry.getKey()+mEntry.getValue());
}
}
}
集合面試分析:1.陣列Array和集合ArrayList區別? 長度固定不固定問題;
2. Collection是用來輸出的,而map是用來查詢的?
hashMap集合採用了hash演算法,查詢速度快。我還要了解下hash實現,還不會。