Map接口

1.介紹

java.util 接口 Map<K,V>
類型參數(shù): K - 此映射所維護(hù)的鍵的類型 ;V - 映射值的類型停巷。
也叫哈希表耍攘、散列表。常用于存 鍵值對 結(jié)構(gòu)的數(shù)據(jù)畔勤。其中的鍵不能重復(fù)蕾各,值可以重復(fù)。

2.特點

1庆揪、 可以根據(jù)鍵式曲,提取對應(yīng)的值
2、 鍵不允許重復(fù)缸榛,如果重復(fù)值會被覆蓋
3吝羞、 存放的都是無序數(shù)據(jù)
4、 初始容量是16内颗,默認(rèn)的加載因子是0.75


繼承結(jié)構(gòu)

3.常用方法測試

package cn.tedu.collection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
//這個類用來測試Map接口
public class Test8_Map {
    public static void main(String[] args) {
       //1钧排,創(chuàng)建Map對象
       //map中的數(shù)據(jù)要符合映射規(guī)則,需要同時指定K和V的數(shù)據(jù)類型起暮。到底指定成什么類型卖氨,要看你想添加什么數(shù)據(jù)会烙。
       Map<Integer,String> map = new HashMap();
       //2,常用方法
       //添加數(shù)據(jù)筒捺,需要同時指定key和value
       map.put(9527, "唐伯虎");
       map.put(9529, "秋香姐");
       map.put(9528, "如花");
       map.put(9528, "石榴姐");
       //特點1:map是一個無序集合  格式:{9527=唐伯虎}
       //特點2:map中柏腻,key不可以重復(fù),如果重復(fù)系吭,value會被覆蓋
       //{9527=唐伯虎, 9528=石榴姐, 9529=秋香姐}
       System.out.println(map);
//     map.clear();//清空集合
       System.out.println( map.containsKey(9527));//判斷是否包含指定的key
       System.out.println( map.containsValue("秋香姐"));//判斷是否包含指定的value
       System.out.println( map.equals("如花"));//判斷是否和指定的元素相等
       System.out.println( map.get(9528));//根據(jù)key獲取value
       System.out.println( map.hashCode());//獲取map集合的哈希碼值
       System.out.println( map.isEmpty());//判斷集合是否為空
       System.out.println( map.remove(9529));//根據(jù)可以刪除對應(yīng)的value
       System.out.println( map.size());//獲取集合的長度
       Collection<String> vs = map.values();//把map中的所有value收集起來放到Collection里
       System.out.println(vs);
       //遍歷map中的數(shù)據(jù)五嫂,需要把map集合轉(zhuǎn)成set集合
//     Set<K> keySet()  :把map中的所有key存入set集合
       Set<Integer> keys = map.keySet();
       //遍歷set集合,得到每個key
       Iterator<Integer> it = keys.iterator();
       while(it.hasNext()) {
           Integer key = it.next();//獲取得到的key
           String value = map.get(key);//拿著key去map中value
           System.out.println(key + ":" + value);
       }      
//     Set<Map.Entry<K,V>> entrySet() :把map集合中的一組key+value數(shù)據(jù)整體放入set中
       Set<Entry<Integer,String>> set = map.entrySet();
       //遍歷set肯尺,得到每個Entry對象
       Iterator<Entry<Integer, String>> it2 = set.iterator();
       while(it2.hasNext()) {
           Entry<Integer, String> entry = it2.next();//得到每個Entry對象
           Integer key = entry.getKey();//獲取Entry對象封裝著的key
           String value = entry.getValue();//獲取Entry對象封裝著的value
           System.out.println(key +"-"+value);
       }
    }
}

4.HashMap實現(xiàn)類

4.1介紹

HashMap的鍵要同時重寫hashCode()和equals()
hashCode()用來判斷確定hash值是否相同
equals()用來判斷屬性的值是否相同
-- equals()判斷數(shù)據(jù)如果相等沃缘,hashCode()必須相同
-- equals()判斷數(shù)據(jù)如果不等,hashCode()盡量不同

HashMap底層是一個Entry數(shù)組则吟,當(dāng)存放數(shù)據(jù)時會根據(jù)hash算法計算數(shù)據(jù)的存放位置槐臀。算法:hash(key)%n,n就是數(shù)組的長度氓仲。當(dāng)計算的位置沒有數(shù)據(jù)時水慨,就直接存放。當(dāng)計算的位置敬扛,有數(shù)據(jù)時晰洒,也就是發(fā)生hash沖突/hash碰撞時,采用鏈表的方式來解決的啥箭,在對應(yīng)的數(shù)組位置存放鏈表的頭結(jié)點谍珊。對鏈表而言,新加入的節(jié)點會從頭結(jié)點加入急侥。


4.2字符串中的字符統(tǒng)計

接收用戶輸入的一串字符串砌滞,統(tǒng)計出現(xiàn)的每個字符的個數(shù)

package cn.tedu.collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
//這個類用來測試Map集合:字符串中的字符統(tǒng)計
public class Test10_MapTest {
    public static void main(String[] args) {
//     1、接收用戶輸入的一串字符串
       String input = new Scanner(System.in).nextLine();
//     2坏怪、想辦法獲取到每個字符
       //遍歷字符串布持,并根據(jù)下標(biāo)獲取對應(yīng)的字符
       Map<Character,Integer> map = new HashMap();//創(chuàng)建map存數(shù)據(jù),格式:{a=1,b=2,c=1}
       for(int i = 0 ; i < input.length() ; i++) {
//         --map的key是啥陕悬?就是2、獲取到的字符
           char key = input.charAt(i);//根據(jù)下標(biāo)獲取對應(yīng)的字符
//     3按傅、統(tǒng)計出現(xiàn)的每個字符的個數(shù)捉超,,存起來唯绍,存map里
           Integer value = map.get(key);//拿著key去map里找value
           if(value==null) {
              map.put(key, 1);//如果是默認(rèn)值null就是沒存過拼岳,存1就行
           }else {
              map.put(key, value+1);//如果存過值,+1就行
           }
       }
       System.out.println(map);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末况芒,一起剝皮案震驚了整個濱河市惜纸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖耐版,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祠够,死亡現(xiàn)場離奇詭異,居然都是意外死亡粪牲,警方通過查閱死者的電腦和手機(jī)古瓤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腺阳,“玉大人落君,你說我怎么就攤上這事⊥ひ” “怎么了绎速?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焙蚓。 經(jīng)常有香客問我纹冤,道長,這世上最難降的妖魔是什么主届? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任赵哲,我火速辦了婚禮,結(jié)果婚禮上君丁,老公的妹妹穿的比我還像新娘枫夺。我一直安慰自己,他們只是感情好绘闷,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布橡庞。 她就那樣靜靜地躺著,像睡著了一般印蔗。 火紅的嫁衣襯著肌膚如雪扒最。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天华嘹,我揣著相機(jī)與錄音吧趣,去河邊找鬼。 笑死耙厚,一個胖子當(dāng)著我的面吹牛强挫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播薛躬,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俯渤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了型宝?” 一聲冷哼從身側(cè)響起八匠,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤絮爷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后梨树,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坑夯,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年劝萤,在試婚紗的時候發(fā)現(xiàn)自己被綠了渊涝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡床嫌,死狀恐怖跨释,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厌处,我是刑警寧澤鳖谈,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站阔涉,受9級特大地震影響缆娃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瑰排,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一贯要、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椭住,春花似錦崇渗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至些举,卻和暖如春跟狱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背户魏。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工驶臊, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叼丑。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓资铡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幢码。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

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