集合3

泛型在類柴底、方法婿脸、接口中的使用
1.泛型在類中的使用
為什么要在類上使用泛型?
(1).為了讓當(dāng)前的Tool1類可以通過給更多類型的對象傳值
(2).不需要再進(jìn)行類型轉(zhuǎn)換柄驻,就可以避免錯誤發(fā)生
//使用泛型前
class Tool{
private Object obj;

public Object getObj() {
    return obj;
}

public void setObj(Object obj) {
    this.obj = obj;
}   

}

//使用泛型后
/*

  • E:代表任意一種引用數(shù)據(jù)類型,<>中不一定是E抑钟,可以使用任意字符

  • 相當(dāng)于在給類使用泛型

  • 使用:在類上確定的泛型可以直接在內(nèi)部成員上使用
    */
    class Tool1<E>{
    private E obj;

    public E getObj() {
    return obj;
    }

    public void setObj(E obj) {
    this.obj = obj;
    }

}

2.泛型在方法中的使用
class Test<E e>{
//1.方法上的泛型與類上的泛型保持一致,一旦類上的泛型確定了在塔,方法上的就確定了
public E show(E e){
return e;
}
//2.方法上使用自己的泛型
注意:泛型在使用之前一定要進(jìn)行聲明
聲明的方法:在方法的最前面使用<泛型類型>
作用:讓方法的內(nèi)部與方法的泛型保持一致
public <F> void play(F f){
ArrayList<F> list = new ArrayList<>();
}

//3.靜態(tài)方法使用泛型
//類上的泛型無法在靜態(tài)方法上使用蛔溃,靜態(tài)方法必須自己定義
public static <W> void song(W w){

}
}
總結(jié):泛型在方法中的使用,只有與類保持一致的類型是贺待,不需要重新聲明,方法中使用自己的泛型以及靜態(tài)方法都需要重新聲明泛型類型

3.泛型在接口中使用
interface Inter<E>{
public void shoe(E e);
}

//相應(yīng)的子類使用泛型的方式
//1.接口有泛型疟位,子類沒有遵守對應(yīng)的泛型
兩種情況:
a.對于重寫的接口方法:泛型的和接口的保持一致喘垂,即方法的泛型也要給一個具體的類型
b.對于自己特有的方法,可以與接口一致正勒,也可以自己定義泛型
class Pig implements Inter<String>{
第一種情況:
public void show(String e){
}
第二種情況:
public <F>void play(F f){
}
}

2.接口有泛型,子類遵守對應(yīng)的泛型
類上的泛型確定了祥绞,接口上的就確定了鸭限,重寫方法上也確定了
class Dog<E> implements Inter<E>{
public void show(E e){
}
}
總結(jié):接口上的泛型,在子類實現(xiàn)的時候败京,如果接口后面接著一個具體的類型(比方說:String),就不需要在類后面聲明了朴皆,如果接口后面是E、F遂铡、W等抽象的類型晶姊,即使類型和接口中的一模一樣,也要聲明,就需要在類后面聲明:<E>超歌、<F>蒂教、<W>

限制上限:<? extends E>:限制的是整個<>可以取的泛型的類型上限是E,<>中可以取的泛型是E類以及E的子類
限制下限:<? super E>:限制的是整個<>可以取的泛型的類型下限是E凝垛,<>中可以取的泛型是E 類及E的父類

collection:直接存儲的元素(值)

Map:本身是一個接口,存儲的是鍵值對炭分,Map中一個元素是一個鍵值對(key:鍵剑肯,value:值),key必須保證唯一让网,value可以相同
分類:HashMap:底層是哈希表,線程不安全的
TreeMap:底層是二叉樹而账,線程不安全的

//創(chuàng)建一個 Map<鍵的類型因篇,值的類型>
Map<String,String> map = new Map<>();
//1.增加: V put(K key, V value) 一次增加一份鍵值對
map.put("01","java");
map.put("02","php");
//因為key是唯一的竞滓,如果給同一個key重復(fù)賦值,后面的值會將前面的覆蓋掉汽烦,并將覆蓋的值返回莉御,如果第一次使用key俗冻,返回null
String value3 = map.put("01","ios");//value是java
//void putAll(map<? extends K,? extends V> map)
Map<String,String> map1=new HashMap>?();
map1.put("03","html");
map1.put("04","python");
map.putAll(map1);

2.刪除
//V remove (Object key) 根據(jù)key刪除元素,并將刪除的元素返回
map.remove("01")//刪除只需要刪除key就可以刪除整個鍵值對
//void clear() 刪除全部迄薄!=null,而是一個空的集合

3.獲取
//V get(Object key) 根據(jù)key獲取一個值
map.get("02")
//int size() 返回鍵值對的個數(shù)
map.size();
//遍歷1:Set<K> KeySet
//遍歷2:Set<map.entry<K,V>> entrySet()

4.一些常用的判斷
//boolean isEmpty() 判斷是否為空
//boolean containsKey(Object key) 判斷是否包含當(dāng)前的Key
//boolean containsValue(Object value) 判斷是否半寒當(dāng)前的value

//遍歷1:Set<key> KeySet()
//原理:得到所有的key存放在set中涣易,利用set的迭代器遍歷得到key

//遍歷2:Set<Map.entry<K,V>> entrySet()
//原理:得到的是每個鍵值對對應(yīng)的映射關(guān)系類型的對那個(實體/entry對象),存在set中新症,利用set的迭代器遍歷得到entry,在利用entry獲取具體的value

public static void main(String[] args){
Map<String,String> map = new Map<>();
map.put("01","java");
map.put("02","php");
map.put("03","html");
map.put("04","python");
map.put("00","ok");
}
//1.使用Set<K> keyset()//這里是Map的引用來調(diào)用keyset
Set<String> set1 = map.keyset();
//獲取迭代器
Iterator<String> iterator = set1.iterator;
while(iterator.hasnext()){
String string = iterator.next();
System.out.println("key:"+String+" value:"+map.get(string));
}

//使用Set<Map.Entry<K,V>> entrySet()//Entry是Map中一個靜態(tài)接口
Set<Map.Entry<String,String>> set2 = map.entrySet();
//獲取迭代器
Iteraror<Map.Entry<String,String>> iterator = set2.iterator();
while(iterator.hasnet()){
Map.Entry<String,String> entry = iterator.next();
System.out.println("key:"+entry.getkey()+" value:"+entry.getvalue());
}
總結(jié):兩種迭代器荚醒,一種是通過將key存到Set中隆嗅,通過keySet方法存入,一個是將鍵值對的映射即Map.Entry存到Set中泡躯,即通過entrySet方法中丽焊,然后通過Set中遍歷進(jìn)行取值

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市粹懒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌确垫,老刑警劉巖帽芽,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異披泪,居然都是意外死亡搬瑰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門泽论,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缚够,你說我怎么就攤上這事〉危” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵锁施,是天一觀的道長思恐。 經(jīng)常有香客問我,道長基跑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任媳否,我火速辦了婚禮荆秦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘步绸。我一直安慰自己,他們只是感情好吕喘,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布刑桑。 她就那樣靜靜地躺著,像睡著了一般闻察。 火紅的嫁衣襯著肌膚如雪琢锋。 梳的紋絲不亂的頭發(fā)上辕漂,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天钮热,我揣著相機與錄音烛芬,去河邊找鬼。 笑死赘娄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的遣臼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鹏浅,長吁一口氣:“原來是場噩夢啊……” “哼屏歹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蝙眶,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤幽纷,失蹤者是張志新(化名)和其女友劉穎式塌,沒想到半個月后友浸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡武学,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年劳淆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沛鸵。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡缆八,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奈辰,到底是詐尸還是另有隱情,我是刑警寧澤吊趾,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站论泛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏岩榆。R本人自食惡果不足惜坟瓢,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望折联。 院中可真熱鬧,春花似錦怀浆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跌帐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間究履,已是汗流浹背脸狸。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炊甲,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓吟吝,卻偏偏與公主長得像颈娜,于是被迫代替她去往敵國和親浙宜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容