泛型和Map集合總結

2021-06-22 00:21:18 字數 4537 閱讀 4410

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...