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

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

集合框架之Map集合

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

今天,我向大家介紹集合框架的最后一個知識塊: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集合嵌套,本文中所有的案例程序都是本人親測過,如有不對的地方請各位朋友歡迎指正,謝謝了!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品免费看| 精品久久久久久久久久久久久| 国产精品亚洲自拍| www.欧美精品| 久久久精品在线观看| 亚洲人成网站在线播| 欧美激情视频播放| 91九色综合久久| 国产精品日韩欧美| 日韩美女av在线| 色偷偷偷亚洲综合网另类| 亚洲欧美制服另类日韩| 在线色欧美三级视频| 插插插亚洲综合网| 国产精品偷伦一区二区| 欧美日韩激情美女| 日韩高清av一区二区三区| 国产亚洲一区二区在线| 91香蕉嫩草影院入口| 68精品久久久久久欧美| 欧美日韩一区二区免费视频| 欧美猛少妇色xxxxx| 亚洲综合中文字幕在线观看| 欧美成人三级视频网站| 亚洲自拍偷拍网址| 色综久久综合桃花网| 久久精品国产亚洲| 精品动漫一区二区| 亚洲精品大尺度| 久久6免费高清热精品| 久久人人爽人人爽人人片av高请| 久久av在线播放| 欧美精品videosex极品1| 亚洲日本中文字幕免费在线不卡| 一区二区三区视频在线| 69精品小视频| 亚洲天堂久久av| 精品国产一区久久久| 大胆欧美人体视频| 亚洲最新av在线网站| 色偷偷偷综合中文字幕;dd| 久久久这里只有精品视频| 国产日韩精品在线| 国产成人在线视频| 亚洲女人被黑人巨大进入| 亚洲美女激情视频| 成人激情在线播放| 国产精品视频网站| 成人妇女免费播放久久久| 日本在线精品视频| 亚洲摸下面视频| 91九色视频在线| 亚洲精品久久久久久久久久久久| 欧美怡春院一区二区三区| 国产精品一区二区三区免费视频| 日韩在线视频播放| 亚洲天堂影视av| 国产成人福利视频| 欧美情侣性视频| 久久精品男人天堂| 国产午夜精品全部视频在线播放| 亚洲免费视频一区二区| 国产欧美精品一区二区三区介绍| 国产精品视频公开费视频| 91精品中国老女人| 久久久亚洲国产天美传媒修理工| 成人两性免费视频| 国产在线一区二区三区| 亚洲精品wwww| 欧美成人一区在线| 欧美精品电影在线| 国产精品精品久久久久久| 国产精品欧美日韩久久| 在线精品播放av| 热久久免费国产视频| 456亚洲影院| 久久久久久91| 国产精品久久电影观看| 伊人久久免费视频| 国产成人拍精品视频午夜网站| 国产欧美一区二区三区四区| 欧美激情中文字幕在线| 亚洲春色另类小说| 欧美精品精品精品精品免费| 精品国产31久久久久久| 成人亚洲欧美一区二区三区| 欧美有码在线观看视频| 成人免费自拍视频| 日韩中文字幕在线播放| 久久免费福利视频| 在线日韩中文字幕| 亚洲的天堂在线中文字幕| 97色在线观看免费视频| 精品爽片免费看久久| 国产精品av在线| 国产精品毛片a∨一区二区三区|国| 亚洲福利在线看| 久久久亚洲福利精品午夜| 国产欧美在线看| 中文字幕日韩精品有码视频| 欧美国产精品人人做人人爱| 精品久久久久久久久久久久久久| 成人黄色中文字幕| 91香蕉电影院| 日韩免费在线免费观看| 精品国产一区二区三区四区在线观看| 一区三区二区视频| 2019国产精品自在线拍国产不卡| 国产一区二区三区视频在线观看| 国产福利视频一区二区| 日韩天堂在线视频| 91精品久久久久久久久不口人| 欧美福利视频在线观看| 日韩av在线影院| 超碰97人人做人人爱少妇| 欧美视频在线免费| 亚洲欧美一区二区精品久久久| 精品国产精品自拍| 亚洲欧美综合图区| 成人免费视频网| 国产日韩精品电影| 伊人久久五月天| 狠狠躁夜夜躁人人爽天天天天97| 国产日韩欧美自拍| 亚洲伊人久久大香线蕉av| 51久久精品夜色国产麻豆| 色综合老司机第九色激情| 日本最新高清不卡中文字幕| 精品性高朝久久久久久久| 亚洲天堂免费观看| 精品亚洲va在线va天堂资源站| 欧美综合一区第一页| 亚洲91精品在线观看| 97人洗澡人人免费公开视频碰碰碰| 久久久久久91香蕉国产| 尤物精品国产第一福利三区| 亚洲第一区第二区| 欧美亚洲日本网站| 北条麻妃久久精品| 色阁综合伊人av| 久久精品小视频| 91精品久久久久久久久久另类| 日产精品99久久久久久| 久久影视三级福利片| 国产精品视频成人| 一个人看的www欧美| 精品视频在线播放| 亚洲国产高清福利视频| 国产69精品久久久| 9.1国产丝袜在线观看| 美女啪啪无遮挡免费久久网站| 亚洲精品v欧美精品v日韩精品| 91精品国产综合久久香蕉最新版| 国产精品视频一区国模私拍| 国产精品第2页| 国产91精品久久久| 亚洲午夜女主播在线直播| 91精品久久久久久久久中文字幕| 538国产精品视频一区二区| 亚洲欧美中文日韩在线| 日韩欧美国产视频| 亚洲国产精久久久久久| 日韩欧美中文字幕在线播放| 欧美最顶级的aⅴ艳星|