1、泛型類:
在寫容器之前想要容器中要存什麼?所以要先寫好泛型
eg:treesetts=new treeset();
有了泛型後就不要強轉
eg:public class person implementscomparator{}
對於下面覆蓋的它的compare方法就不用強制轉換了。
public int compare(person p){}這裡就不用在做強制轉換了。
實現**:
public static void main(string args)
class dog{}
class tool
泛型定義在方法上時只能放在返回值的前面和修飾符的後面
什麼時候使用泛型方法?當方法操作的引用資料型別不確定的時候就使用。
3、泛型介面:
實現**:
inte***ceinter
public staticvoid main(string args)
對集合中的元素進行迭代的功能,因為列印集合中的元素型別是不確定的,無法明確,可以使用泛型中的萬用字元來完成,該萬用字元用?來標示,
如果要對操作的型別進行限定,只操作一部分型別時,可以使用泛型的高階功能,泛型的限定。
? extends e:可以接收e型別和e的子型別。
? super e:可以接收e型別或者e的父型別。
實現**:
public staticvoid printcollection(collection<? extedns person> coll){
iterator<? extends person> it = coll.iterator();
while(it.hasnext()){
person p =it.next();
system.out.println(p.getname()+"-----"+p.getage());
5、什麼時候使用e extends?
一般在儲存具體引用型別時使用這種情況,因為儲存e型別或者e型別的子類,這時可以保證型別是安全的。
實現**:
public static void main(string args) {
collectioncoll = newarraylist();
coll.add(newperson("abc1",21));
coll.add(newperson("abc2",22));
collectioncoll2 = newarraylist();
coll2.add(newstudent("lisi1",31));
coll2.add(newstudent("lisi2",32));
coll2.add(newstudent("lisi3",33));
collectioncoll3 = newarraylist();
coll3.add(newworker("lisi11",31));
coll3.add(newworker("lisi22",32));
coll.addall(coll2);
coll.addall(coll3);
iteratorit =coll.iterator();
while(it.hasnext()){
personstu = it.next();
system.out.println(stu.getname());
6、泛型下限:
下限什麼時候用?
從集合中取出物件進行操作時,可以使用下限。比如:比較器。無論集合中的元素物件的型別是什麼,只要比較器的指定的型別可以接受這些物件完成比較,就可以了。所以比較器的型別,可以是集合中當前元素的型別,也是可以該元素型別的父型別。
實現**:
public staticvoid main(string args) {
treesetts = new treeset(new comparatorname());
ts.add(newstudent("lisi1",21));
ts.add(newstudent("lisi2",28));
ts.add(newstudent("lisi9",23));
ts.add(newstudent("lisi7",27));
treesetts2 = new treeset(new comparatorname());
ts2.add(newworker("lisi11",41));
ts2.add(newworker("lisi22",48));
ts2.add(newworker("lisi99",43));
ts2.add(newworker("lisi77",47));
printcollection(ts);
printcollection(ts2);
public static void printcollection(treeset<? extends person> ts2) {
iterator<?extends person> it = ts2.iterator();
while(it.hasnext()){
person p = it.next();
system.out.println(p.getname()+":"+p.getage());
class comparatorname implements comparator{
@override
public int compare(person o1, person o2){//person o1 = new student("lisi1",21)
int temp = o1.getname().compareto(o2.getname());
return temp==0?o1.getage()-o2.getage():temp;
下限什麼時候用?
從集合中取出物件進行操作時,可以使用下限。比如:比較器。
無論集合中的元素物件的型別是什麼,只要比較器的指定的型別可以接受這些物件完成比較,就可以了。
所以比較器的型別,可以是集合中當前元素的型別,也是可以該元素型別的父型別。
7、map集合:
特點:1、它是集合框架中的頂層。
2、它一次儲存一對元素,乙個叫鍵,乙個叫值,也就是鍵值對。
collection一次存乙個,稱為單列集合。
map一次存一對,稱為雙列集合。
3、map集合中必須保證鍵的唯一性。
4、如果儲存鍵值對時,鍵出現重複,新值覆蓋舊值,其實map集合儲存的是對映關係。
8、map常見的方法:
該集合儲存的鍵值對,一對一對的往裡存,而且要保證鍵的唯一性。
1、新增:
put(key,value);
putall()
2、刪除:
clear();
remove(key);根據鍵來刪,因為鍵唯一。
3、判斷:
containkey():
containvlaue();
isempty();
4、獲取:
get(object key);
size();獲取長度。
values();獲取所有的值。張三對的北京人,李四對應上海人。所以要把所有的值都獲取,看。
entryset();將map集合中的對映關係
map.entry其實entry也是乙個介面,它是map介面中的乙個內部介面。
inte***ce map{
publicstatic inte***ce entry{
public abstract object getkey();
public abstract object getvalue();
keyset();將map中所有的鍵都存入了set集合,因為set具備迭代器,所以可以迭代方式取出所有的鍵,在根據get方法獲取每乙個鍵對應的值。
map集合的取出原理:將map集合轉成set集合,在通過迭代器取出
2、map
|--hashtable:低層是雜湊表資料結構,不可以存入null作為鍵和null作為值。該集合是執行緒同步的。jdk1.0
|--hashmap:低層是雜湊表資料結構,該集合是不同步的,允許使用null鍵和null值。jdk1.2效率高
|--treemap:低層是二叉樹資料結構,執行緒不同步,可以用於給map集合中的鍵進行排序。
map集合被使用是因為具備對映關係。
4、collections:
1、裡面的方法都是靜態的。
2、沒有建構函式是因為不用建立物件的。
泛型和map集合
1 泛型 jdk1.5出現的安全機制 好處 1 將執行時期的問題classcastexception轉換為編譯時期。2 避免了強制轉換的麻煩 什麼時候用?當操作的引用資料型別不確定的時候,就使用 將要操作的引用資料型別傳入即可,其實 就是乙個用於接收具體引用資料型別的引數範圍。泛型技術是給編譯器使用...
集合 map 泛型
集合框架 是為表示和操作集合而規定的一種統一的標準的體系結構。任何集合框架都包含三大塊內容 對外的介面 介面的實現和對集合運算的演算法。collection 介面 collection物件是將多個元素組成乙個單元的物件 集合用於儲存 檢索和操縱資料 集合框架是用於表示和操縱集合的統一體系結構 集合框...
泛型和集合
集合 arraylist類,是命名空間system.collections下的一部分,它是使用大小可按需動態增加的陣列實現ilist介面,但是arraylist不是型別安全的。泛型集合 list類,是對arraylist的乙個完善。通常情況下建議使用泛型集合,因為這樣可以獲得型別安全的直接優點。il...