亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

集合框架之Map集合

2019-11-14 12:48:53
字體:
來源:轉載
供稿:網友

今天,我向大家介紹集合框架的最后一個知識塊:Map集合,Map集合是雙列集合的根接口。我個人感覺Map集合比Collection集合更重要些,在實際的項目開發中,使用Map創建集合非常之多,在框架整合開發中也會用到,在后期做Web項目的時候還會用到它,原因我不多說。接下來直接看我演示Map集合的案例…在前面我說到了Collection集合,Collection集合是單列集合的根接口,我們學習了Collection集合的Set集合和List集合,又介紹和學習了Set集合的子集合:HashSet、LinkedHashSet和TreeSet,主要說了它們的功能和用途,學習了List集合的子集合:ArrayList、LinkedList和Vector,也介紹它的功能和用途,但其中最重要的是要學會怎樣去應用,該如何用?嘿嘿,前面的介紹和學習那就慢慢領悟吧~接下來,步入我們的正題:介紹和學習Map集合。 首先,Map集合它也是一個接口,上面剛說到,它是雙列集合的根接口。關于Map集合接口的概述,百度了一下,網上說的是千篇一律。我從Sun官方提供的手冊中,查看API可知: Map集合是:1.將鍵映射到值得對象;2.是一個集合不能包含重復的鍵;3.每個鍵最多只能映射到一個值。 那Map接口與Collection接口有什么不同呢? 1.Map接口是雙列的,而Collection接口是單列的; 2.Map的鍵唯一,Collection的子體系Set是唯一的; 3.Map集合的數據結構針對鍵有效,跟值無關,Collection集合的數據結構針對元素有效。 Map集合它處于java.util包下,它的數據結構看起來更像多行兩列的表格,每一條數據中包含兩個信息key-value,其中key在Map中不允許重復,重復指的是equals為true,Map集合它有兩個子類,一個是HashMap,一個是TreeMap,HashMap有一個子類叫做LinkedHashMap。和Set集合的體系結構非常相似。接下來,我們來看一下Map集合的方法: 1.V put(K k,V v):向Map集合中添加元素 如果鍵是第一次存儲,就直接存儲元素,返回null; 如果鍵不是第一次存儲,就用值把以前的值替換掉,返回以前的值。 如下程序代碼:

package cn.edu.jit.map;import java.util.HashMap;import java.util.Map;/** * Map * 該數據結構看起來更像多行兩列的表格 * 每一條數據中包含兩個信息key-value, * 其中key在Map中不允許重復,重復指的是equals為true。 * @author Rocky * */public class MapDemo01 { public static void main(String[] args) { /* * Map本身也是一個接口,是不能實例化的,我們用它的一個 * 實 * 例叫做:HashMap * 我們通常也讓Map加泛型,給它們的具體類型。 * * * 創建一個Map * key是字符串,value是整數 */ Map<String,Integer> map = new HashMap<String,Integer>(); //調用Map的一個方法叫 put() 可以存放key和value的值。 /* * V put(K k,V v) * 將給定的key與對應的value存入Map中。 * * 若給定的key在Map中不存在,則是添加新內容,那么返回的就是被替換的value值。 * 若給定的key在Map中已存在,則是替換value操作,返回值是null。 * */ System.out.PRintln(map);//{} Integer i = map.put("語文", 95); System.out.println(map);//{語文=95} System.out.println(i);//null i = map.put("語文", 99); System.out.println(map);//{語文=99} map.put("英語", 90); map.put("數學", 90); map.put("物理", 98); map.put("化學", 88); System.out.println(map); }}

從Map中獲取元素的方式,我們采用Map的get()方法。 2.V get(K k):根據給定的key獲取對應的value值。 如下程序代碼:

/* * V get(K k) * 根據給定的key獲取對應的value值 */ Integer num = map.get("英語"); System.out.println("英語" + num); //如果給一個不存在的key,其結果如下: /* * 給定一個Map中不存在的key, * 返回值則為null。 */ num = map.get("高數"); System.out.println("高數:" + num);//若找不到對應的key值,則返回null"空"

3.刪除功能: void clear():移除所有的鍵值對元素; V remove(Object key):根據鍵刪除鍵值對元素,并把值返回。 如下程序代碼:

package cn.edu.jit.map;import java.util.HashMap;import java.util.Map;public class MapDemo02 { public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("張三", 23); map.put("李四", 24); map.put("王五", 25); map.put("趙六", 26); //根據鍵刪除元素,返回鍵對應的值 Integer value = map.remove("張三"); System.out.println(value); System.out.println(map); //運行結果: //23 //{趙六=26, 李四=24, 王五=25} }}

4.判斷功能: boolean containsKey(K k): 判斷當前Map中是否含有給定的key,是否含有是根據key的equals判斷的,返回值為boolean類型。 boolean containsValue(Object value): 判斷集合是否包含指定的值,返回值為boolean類型。 boolean isEmpty(): 判斷集合是否為空,返回值為boolean類型。 如下代碼程序:

package cn.edu.jit.map;import java.util.HashMap;import java.util.Map;public class MapDemo03 { public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("張三", 23); map.put("李四", 24); map.put("王五", 25); map.put("趙六", 26); //根據鍵刪除元素,返回鍵對應的值// Integer value = map.remove("張三");// System.out.println(value); /* * 判斷是否包含傳入的鍵(值) */ System.out.println(map.containsKey("張三"));//true System.out.println(map.containsValue(23));//true System.out.println(map); }}

5.int size():返回集合中的鍵值對的個數 如下程序代碼:

package cn.edu.jit.map;import java.util.Collection;import java.util.HashMap;import java.util.Map;public class MapDemo04 { public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("張三", 23); map.put("李四", 24); map.put("王五", 25); map.put("趙六", 26); Collection<Integer> c = map.values(); System.out.println(c);//[26, 23, 24, 25] System.out.println(map.size());//4 }}

上面幾個方法主要是Map集合的常用方法,接下來我們看hashCode對Map操作的影響,看如下程序代碼:

package cn.edu.jit.map;import java.util.HashMap;import java.util.Map;/** * hashCode對Map操作的影響 * @author Rocky * */public class MapDemo02 { public static void main(String[] args) { Map<Point,Integer> map = new HashMap<Point,Integer>(100); Point p = new Point(1,2); map.put(p, 100); boolean contains = map.containsKey(p); System.out.println("包含key:" + contains); System.out.println(map); Integer i = map.get(p); System.out.println(i); System.out.println(p.hashCode()); //內容變化了,hashCode值就會變化 p.setX(2); System.out.println(p.hashCode()); i = map.get(p); System.out.println(i);//null contains = map.containsKey(p); System.out.println("包含key:" + contains);//包含key:false System.out.println(map);//{day05.Point@401=100} map.put(p, 200); System.out.println(map); Integer ii = map.remove(p); System.out.println("刪除的是:" + ii); System.out.println(map); p.setX(1); ii = map.remove(p); System.out.println("刪除的是:" + ii);//null System.out.println(map);//{day05.Point@401=100} }}

使用HashMap時應當注意,作為key的對象有以下要求: 1.首先當key這個類重寫了equals方法,那么重寫的hashcode的要求必須滿足; 2.作為key的對象若存入HashMap后,其會影響hashcode值得內容不要發生改變,否則可能會影響Map操作。 下面,我給大家主要介紹遍歷Map的三種方式: 1.遍歷所有的key; 2.遍歷所有的鍵值對(key-value); 3.遍歷所有的value(不常用) 如下程序代碼:

package cn.edu.jit.map;import java.util.Collection;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.Map;import java.util.Set;import java.util.Map.Entry;/** * 遍歷Map的三種方式: * 1:遍歷所有的key * 2:遍歷所有的鍵值對(key-value) * 3:遍歷所有的value(不常用) * @author Rocky * */public class MapDemo03 { public static void main(String[] args) { Map<String,Integer> map = new LinkedHashMap<String,Integer>(); map.put("數學", 90); map.put("語文", 98); map.put("物理", 85); map.put("化學", 78); map.put("英語", 92); map.put("體育", 65); map.put("生物", 78); /* * 遍歷所有的key * Set<K> keySet() * 該方法可以獲取Map中所有的Key,并將它們存入一個Set集合中返回 * 所以,遍歷該集合就等于遍歷所有的key了。 */ Set<String> keySet = map.keySet(); for(String str : keySet) { System.out.println("str:" + str); } /* * 遍歷鍵值對 * Set<Entry> entrySet() * 該方法會將每一組key-value存入一個Entry示例中,并將 * 這些Entry實例存入一個Set集合并返回 * 我們只需要遍歷該集合,拿到每一個Entry實例并獲取其中的key與 * value即可。 * * Entry是Map的一個內部類。 */ //我們Entry里面的泛型兒要和Map中的泛型保持一致! Set<Entry<String,Integer>> entrySet = map.entrySet(); for(Entry<String,Integer> e:entrySet) { String key = e.getKey(); Integer value = e.getValue(); System.out.println(key+":"+value); } /* * 遍歷所有的value * 獲取來的是Collection集合 */ Collection<Integer> values = map.values(); for(Integer value : values) { System.out.println("value:" + value); } }}

下面,我們來做一個案例練習:HashMap集合鍵是Student,值是String。 為什么我們要在雙列集合中要存儲一個Student呢,Student是什么?它是一個自定義類。也就是我們想把自定義對象存儲在HashMap集合中。剛在一開始的時候我就介紹過,HashMap這個指針指向的只對鍵有效,咱們把自定義對象存儲在它的鍵的位置,就想看它如何保證鍵的唯一。接下來,我們來演示這個案例,看如下程序代碼: 首先,我們要自定義一個Student類:

package cn.edu.jit.bean;public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Studnet [age=" + age + ", name=" + name + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }}

我們創建一個HashMapDemo05,如下程序:

package cn.edu.jit.map;import java.util.HashMap;import cn.edu.jit.bean.Student;/** * 案例演示: * HashMap集合鍵是Student,值是String的案例。 * 鍵:是學生對象,代表每一個學生; * 值:是字符串對象,代表學生的歸屬地 * @author Rocky * */public class HashMapDemo05 { public static void main(String[] args) { HashMap<Student, String> hm = new HashMap<Student, String>(); hm.put(new Student("錢春華",23), "江蘇南通"); hm.put(new Student("Jolin",24), "江蘇泰州"); hm.put(new Student("Jolin",24), "上海"); hm.put(new Student("二狗",25), "江蘇無錫"); hm.put(new Student("瑤瑤",20), "江蘇南京"); System.out.println(hm); //{Studnet [age=23, name=錢春華]=江蘇南通, Studnet [age=25, name=二狗]=江蘇無錫, Studnet [age=20, name=瑤瑤]=江蘇南京, Studnet [age=24, name=Jolin]=上海} }}

接下來,我們來說HashMap有一個子類叫做LinkedHashMap,它的特點是:底層是鏈表實現的可以保證怎么存就怎么取。如下代碼:

package cn.edu.jit.map;import java.util.LinkedHashMap;/** * * @author Rocky * */public class LinkedHashMapDemo { public static void main(String[] args) { LinkedHashMap<String, Integer> lhm = new LinkedHashMap<String, Integer>(); lhm.put("張三", 23); lhm.put("李四", 24); lhm.put("趙六", 26); lhm.put("王五", 25); System.out.println(lhm); //{張三=23, 李四=24, 趙六=26, 王五=25} }}

說完了LinkedHashMap,我們再來說一說TreeMap,我們來看看TreeMap如何對鍵唯一,因為雙列集合只針對鍵有效,鍵值得算法是一個二叉樹,也就是說它可以對鍵進行排序。好,我們來通過這個案例演示TreeMap集合:鍵是Student,值是:String。如下程序代碼: 首先我們要在Student類實現Comparable接口,并重寫compareTo方法,貼上代碼:

@Override public int compareTo(Student o) { int num = this.age - o.age; return num == 0 ? this.name.compareTo(o.name) : num; }

Student類整個代碼如下:

package cn.edu.jit.bean;public class Student implements Comparable<Student> { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Studnet [age=" + age + ", name=" + name + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public int compareTo(Student o) { int num = this.age - o.age; return num == 0 ? this.name.compareTo(o.name) : num; }}

在創建一個TreeMapDemo類,代碼如下:

package cn.edu.jit.map;import java.util.TreeMap;import cn.edu.jit.bean.Student;/** * TreeMap集合鍵是Student,值是String * @author Rocky * */public class TreeMapDemo { public static void main(String[] args) { TreeMap<Student, String> tm = new TreeMap<Student, String>(); tm.put(new Student("張三",23), "北京"); tm.put(new Student("李四",24), "上海"); tm.put(new Student("王五",25), "廣州"); tm.put(new Student("趙六",26), "深圳"); System.out.println(tm); //在沒有實現Comparable接口時,報了異常,因為沒有在Student類實現Compare這個接口。 //運行結果:{Studnet [age=23, name=張三]=北京, Studnet [age=24, name=李四]=上海, Studnet [age=25, name=王五]=廣州, Studnet [age=26, name=趙六]=深圳} }}

大家覺得很好奇,剛才運行結果的程序是按照對象比較性進行排序的,有沒有比較器呢,我們來看一下,有一個重構方法Comparator去實現,我們通過匿名內部類去實現,貼上代碼:

package cn.edu.jit.map;import java.util.Comparator;import java.util.TreeMap;import cn.edu.jit.bean.Student;/** * TreeMap集合鍵是Student,值是String * @author Rocky * */public class TreeMapDemo { public static void main(String[] args) { TreeMap<Student, String> tm = new TreeMap<Student, String>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { //按照姓名去比較 int num = s1.getName().compareTo(s2.getName()); return num == 0 ? s1.getAge() - s2.getAge() : num; } }); tm.put(new Student("張三",23), "北京"); tm.put(new Student("李四",24), "上海"); tm.put(new Student("王五",25), "廣州"); tm.put(new Student("趙六",26), "深圳"); System.out.println(tm); //運行結果:{Studnet [age=23, name=張三]=北京, Studnet [age=24, name=李四]=上海, Studnet [age=25, name=王五]=廣州, Studnet [age=26, name=趙六]=深圳} //我們可以看到,這就按照順序排序打印出來了 }}

好了,今天Map集合方法以及它的用途就介紹到這,下面講解HashMap集合嵌套,本文中所有的案例程序都是本人親測過,如有不對的地方請各位朋友歡迎指正,謝謝了!


上一篇:go環境安裝

下一篇:jquery 事件小結

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线电影av不卡网址| 欧美日韩国产影院| 欧美日韩中国免费专区在线看| 欧美日韩中文字幕在线| 欧美激情伊人电影| 精品一区二区三区三区| 亚洲自拍偷拍色图| 91久久精品美女高潮| 欧日韩在线观看| 欧美老女人www| 成人黄色av播放免费| 亚洲精品按摩视频| 欧美一级大胆视频| 欧美一级大片视频| 亚洲欧美成人在线| 国产精品免费观看在线| 国产一区香蕉久久| 精品久久久久久久久久久久| 日韩av在线免费观看| 色无极影院亚洲| 日韩精品中文字| 久久久久久久亚洲精品| 亚洲欧美日韩第一区| 日韩精品极品视频| 国产偷亚洲偷欧美偷精品| 亚洲视频在线观看网站| 麻豆精品精华液| 97精品一区二区三区| 欧美性jizz18性欧美| 91久久久久久国产精品| 亚洲欧美日韩第一区| 一区二区福利视频| 亚洲人成网站在线播| 欧美电影免费在线观看| 九色精品美女在线| 久久在线精品视频| 亚洲美女精品久久| 91日韩在线播放| 久久久999国产| 最近2019年日本中文免费字幕| 成人日韩在线电影| 欧美肥婆姓交大片| 亚洲自拍高清视频网站| 成人网址在线观看| 精品国产欧美一区二区三区成人| 色婷婷成人综合| 久久久精品国产| 久久99热精品这里久久精品| 国产精品成人在线| 日韩av大片在线| 亚洲第一区中文99精品| 亚洲韩国欧洲国产日产av| 日韩黄在线观看| 亚洲国产一区二区三区在线观看| 亚洲日本中文字幕免费在线不卡| 欧美视频中文在线看| 91沈先生在线观看| 在线电影欧美日韩一区二区私密| 日韩免费在线电影| 亚洲日本欧美日韩高观看| 日韩精品在线观看网站| 欧美另类精品xxxx孕妇| 全色精品综合影院| 亚洲精品欧美日韩专区| 91豆花精品一区| 亚洲精品电影在线| 亚洲女人初尝黑人巨大| 色在人av网站天堂精品| 欧美一区二粉嫩精品国产一线天| 福利一区视频在线观看| 色偷偷亚洲男人天堂| 欧美午夜影院在线视频| 欧美精品在线免费观看| 成人国内精品久久久久一区| 亚洲天堂成人在线视频| 国产精品视频公开费视频| 久久影视三级福利片| 国产一区二区色| 国产精品久久色| 97久久久久久| 久久亚洲国产精品| 日韩激情第一页| 亚洲毛片在线观看| 神马国产精品影院av| 国产v综合ⅴ日韩v欧美大片| 久久久久久91香蕉国产| 亚洲精品97久久| 亚洲一区二区三区乱码aⅴ| 亚洲精品视频中文字幕| 国产乱肥老妇国产一区二| 精品国产91乱高清在线观看| 久久理论片午夜琪琪电影网| 亚洲色图13p| 美女国内精品自产拍在线播放| 亚洲精品福利资源站| 欧美巨乳在线观看| 大胆人体色综合| 欧美激情一二区| 亚洲国产高潮在线观看| 北条麻妃一区二区在线观看| 九九热最新视频//这里只有精品| 日韩高清人体午夜| 中文字幕国内精品| 欧美日本亚洲视频| 久久99亚洲精品| 日韩电影中文 亚洲精品乱码| 久久av中文字幕| 国产免费久久av| 国产精彩精品视频| 精品自在线视频| 欧美老女人www| 欧美久久精品一级黑人c片| 国产精品网站视频| www国产91| 最近2019中文字幕大全第二页| 国产999精品久久久| 日韩电影免费在线观看中文字幕| 亚洲成年人在线| 久久久久久久爱| 久久噜噜噜精品国产亚洲综合| 欧美极品美女视频网站在线观看免费| 97精品国产97久久久久久春色| 亚洲国产日韩欧美在线99| 成人亲热视频网站| 色狠狠av一区二区三区香蕉蜜桃| 日韩在线观看精品| 大量国产精品视频| 国产精品嫩草影院一区二区| 欧美性猛交丰臀xxxxx网站| 国产97在线亚洲| 日韩网站在线观看| 久久国产天堂福利天堂| 欧美性生交xxxxxdddd| 欧美日韩中文字幕日韩欧美| 久久精品国产91精品亚洲| 亚洲影院色在线观看免费| 亚洲综合小说区| 国产精品三级网站| 国产精品久久久久久五月尺| 国产精品久久久久久久久久久久久久| 国产精品极品美女在线观看免费| 国产精品日韩一区| 亚洲精品mp4| 精品国产美女在线| 欧美日韩在线影院| 亚洲精品国精品久久99热| 国产精品福利网站| 日韩免费看的电影电视剧大全| 一本色道久久88综合日韩精品| xvideos成人免费中文版| 992tv在线成人免费观看| 亚洲欧美激情精品一区二区| 精品亚洲国产成av人片传媒| 色综合久久久久久中文网| 久久99国产精品自在自在app| 久久精品国亚洲| 亚洲欧美另类自拍| 在线播放亚洲激情| 亚洲成年人影院在线| 日本精品中文字幕| 亚洲第一男人av| 97精品国产91久久久久久| 国产欧美一区二区| 6080yy精品一区二区三区|