黑馬程式員<<Map>>

來源:互聯網
上載者:User


1. Map

2. HashMap        1. 添加元素

 

import java.util.HashMap;import java.util.Map;public class MapDemo {   public static void main(String[] args) {     /* 定義了一個Map集合,鍵和值的類型都是String */     Map<String, String> map = new HashMap<String, String>();     map.put("110", "張三");     map.put("111", "李四");     map.put("112", "王五");     System.out.println("Map集合中的鍵和值:" + map);     System.out.println("----------------");     /* 利用put方法來添加元素,返回值是當前鍵以前對應的值,如果沒有則返回null      *當添加了相同的鍵,那麼新的鍵和值會替換原來的鍵和值      * */     System.out.println(map.put("111", "趙六"));//這裡返回的是李四,因為此集合中前面有111鍵對應的值     System.out.println(map.put("113", "王剛"));//此時返回的是null,因為此集合中前面沒有與113鍵對應的值     System.out.println("Map集合中的鍵和值:" + map);   }}結果:Map集合中的鍵和值:{112=王五, 110=張三, 111=李四}----------------李四nullMap集合中的鍵和值:{112=王五, 113=王剛, 110=張三, 111=趙六}

 

        2.判斷元素

 

     

import java.util.HashMap;import java.util.Map; public class MapDemo {   public static void main(String[] args) {     /* 定義了一個Map集合,鍵和值的類型都是String */     Map<String, String> map = new HashMap<String, String>();     map.put("110", "張三");      map.put("111", "李四");     map.put("112", "王五");     System.out.println("Map集合中的鍵和值:" + map);     /*      * 利用booleancontainsKey(Object key)判斷集合中是否有此鍵利用boolean      * containsValue(Objectvalue)判斷此集合中是否有此值      */     System.out.println("集合中是否包含110鍵:" + map.containsKey("110"));     System.out.println("集合中是否包含000鍵:" + map.containsKey("000"));     System.out.println("集合中是否包含   張三   值:" +map.containsValue("張三"));     System.out.println("集合中是否包含     王梅    值:" +map.containsValue("王梅"));   }}結果:Map集合中的鍵和值:{112=王五, 110=張三, 111=李四}集合中是否包含110鍵:true集合中是否包含000鍵:false集合中是否包含   張三   值:true集合中是否包含     王梅    值:false

 

       3.刪除元素

   

import java.util.HashMap;import java.util.Map; public class MapDemo {   public static void main(String[] args) {     /* 定義了一個Map集合,鍵和值的類型都是String */     Map<String, String> map = new HashMap<String, String>();     map.put("110", "張三");     map.put("111", "李四");     map.put("112", "王五");     map.put("113", "趙六");     System.out.println("Map集合中的鍵和值:" + map);     /*      * 利用remove(Objectkey)通過鍵來刪除元素,返回值是此鍵以前對應的值,如果不存在返回null 利用void      * clear()清空集合中的元素      */     System.out.println("刪除 110鍵對應的元素:" + map.remove("110"));// 這裡返回是張三     System.out.println("刪除 120鍵對應的元素:" + map.remove("120"));// 這裡返回null,因為此集合中沒有120對應的值     System.out.println("刪除指定元素的集合:" + map);     map.clear();// 清空集合     System.out.println("清空集合後的集合:" + map);   }}結果:Map集合中的鍵和值:{112=王五, 113=趙六, 110=張三, 111=李四}刪除 110鍵對應的元素:張三刪除 120鍵對應的元素:null刪除 指定元素的集合:{112=王五, 113=趙六, 111=李四}清空集合後的集合:{}


 

3. 擷取元素           1.單個擷取

  

 import java.util.HashMap;import java.util.Map; public class MapDemo {   public static void main(String[] args) {     /* 定義了一個Map集合,鍵和值的類型都是String */     Map<String, String> map = new HashMap<String, String>();     map.put("110", "張三");     System.out.println("Map集合中的鍵和值:" + map);     /*      * 利用get(Objectkey)擷取鍵對應的單個值,如果不存在,然會null      */     System.out.println("擷取110對應的值:" + map.get("110"));// 這裡返回是張三     System.out.println("擷取111對應的值:" + map.get("111"));// 這裡返回是null    }}結果:Map集合中的鍵和值:{110=張三}擷取110對應的值:張三擷取111對應的值:null

             2. 擷取鍵的集合

package www.fuxi.jihe; import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set; public class MapDemo {   public static void main(String[] args) {     /* 定義了一個Map集合,鍵和值的類型都是String */     Map<String, String> map = new HashMap<String, String>();     map.put("110", "張三");     map.put("111", "李四");     map.put("112", "王五");     System.out.println("Map集合中的鍵和值:" + map);     /*      * 利用Set<K>keySet()擷取集合中鍵的集合返回值是Set集合      * 我們可以通過Set集合中的迭代器讀取出鍵,然後再通過get(key)擷取元素      */     Set<String> set = map.keySet();// 獲得鍵的集合     Iterator<String> it = set.iterator();// 獲得鍵集合的迭代器     while (it.hasNext()) {        String key = it.next();        System.out.println(key + ":" + map.get(key));     }     /*      * 利用Set<K>keySet()擷取集合中鍵的集合返回值是Set集合然後把集合裝換成數組,然後讀取也可以      */     System.out.println("----------\n");     Object[] keys = set.toArray();     for (int i = 0; i < keys.length; i++) {        System.out.println((String) keys[i] + ":"             + map.get((String) keys[i]));     }    }} 結果:Map集合中的鍵和值:{112=王五, 110=張三, 111=李四}112:王五110:張三111:李四---------- 112:王五110:張三111:李四


 

      3.擷取值的集合

   

 packagewww.fuxi.jihe; import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set; public class MapDemo {      publicstatic void main(String[] args) {           /* 定義了一個Map集合,鍵和值的類型都是String */           Map<String,String> map = new HashMap<String, String>();           map.put("110","張三");           map.put("111","李四");           map.put("112","王五");           System.out.println("Map集合中的鍵和值:" + map);           /**            * 通過方法Collection<V>values()獲得集合中的所有值            */           System.out.println("集合中的值:");       Collection<String>values=map.values();       Iteratorit=values.iterator();      while(it.hasNext()){           System.out.println(it.next());       }      }}結果:   Map集合中的鍵和值:{112=王五, 110=張三, 111=李四}集合中的值:王五張三李四

 

       4.  通過映射關係

 

 

 import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set; public class MapDemo {   public static void main(String[] args) {     /* 定義了一個Map集合,鍵和值的類型都是String */     Map<String, String> map = new HashMap<String, String>();     map.put("110", "張三");     map.put("111", "李四");     map.put("112", "王五");     System.out.println("Map集合中的鍵和值:" + map);     /*      * 利用Set<Map.Entry<K,V>>entrySet()擷取集合中的映射關係      * 然後通過迭代器讀取Set集合      * 然後利用Map.Entry中的K getKey()獲得鍵,V getValue()擷取值      */      Set<Map.Entry<String,String>> set=map.entrySet();//獲得映射的集合      Iterator<Map.Entry<String,String>>  it=set.iterator();//獲得迭代器       while(it.hasNext()){         Map.Entry<String, String> en=it.next();//擷取集合中的元素         String key=en.getKey();         String value=en.getValue();         System.out.println("鍵-值:"+key+"-"+value);       }    }} 結果:Map集合中的鍵和值:{112=王五, 110=張三, 111=李四}鍵-值:112-王五鍵-值:110-張三鍵-值:111-李四 

static interface

Map.Entry<K,V>
          映射項(鍵-值對)。

 

 

4. HashMap和TreeMap的比較使用

  

       1. 利用HashMap

 

import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set; public class HashMapDemo {  public static void main(String[] args) {    /* 定義HashMap,裡面儲存的是Student和地址 */    HashMap<Student, String> map = new HashMap<Student, String>();    map.put(new Student("張三", 23), "北京");    map.put(new Student("李四", 24), "上海");    map.put(new Student("王五", 23), "南京");    map.put(new Student("張三", 23), "廣州");// 存了一個重複的值     // 第一種讀取方式    Set<Student> set = map.keySet();    Iterator<Student> it = set.iterator();    while (it.hasNext()) {      Student stu = it.next();      String name = stu.getName();      int age = stu.getAge();      String address = map.get(stu);      System.out.println(name + ":" + age + ":" + address);    }    System.out.println("---------");    System.out.println("下面利用的是映射關係讀取");    Set<Map.Entry<Student, String>> ens = map.entrySet();    Iterator<Map.Entry<Student, String>> its =ens.iterator();    while (its.hasNext()) {      Map.Entry<Student, String> me = its.next();      Student stu = me.getKey();      String address = me.getValue();      System.out.println(stu.getName()+ ":" + stu.getAge() + ":"           + address);    }  } } 結果:張三:23:廣州王五:23:南京李四:24:上海---------下面利用的是映射關係讀取張三:23:廣州王五:23:南京李四:24:上海


 

2.     利用TreeMap排序

 

import java.util.HashMap;import java.util.Iterator;import java.util.Set;import java.util.TreeMap; public class TreeMapDemo {  public static void main(String[] args) {    /* 定義HashMap,裡面儲存的是Student和地址 */    TreeMap<Student, String> map = new TreeMap<Student, String>();    map.put(new Student("張三", 23), "北京");    map.put(new Student("李四", 21), "上海");    map.put(new Student("王五", 24), "南京");    map.put(new Student("趙六", 26), "廣州");     Set<Student> set = map.keySet();    Iterator<Student> it = set.iterator();    while (it.hasNext()) {      Student stu = it.next();      String name = stu.getName();      int age = stu.getAge();      String address = map.get(stu);      System.out.println(name + ":" + age + ":" + address);    }   } }結果:李四:21:上海張三:23:北京王五:24:南京趙六:26:廣州 


import java.util.Comparator; public class StuNameComparatorimplements Comparator<Student> {/*按照姓名排序,如果姓名相同,那麼按照年齡排序*/  public int compare(Student o1, Student o2) {    int num = o1.getName().compareTo(o2.getName());    if (num == 0) {      return o1.getAge() - o2.getAge();    }    return num;  } } import java.util.HashMap;import java.util.Iterator;import java.util.Set;import java.util.TreeMap; public class TreeMapDemo {  public static void main(String[] args) {    /* 定義HashMap,裡面儲存的是Student和地址 */    TreeMap<Student, String> map = new TreeMap<Student, String>(newStuNameComparator());    map.put(new Student("java03", 23), "北京");    map.put(new Student("net02", 21), "上海");    map.put(new Student("java01", 24), "南京");    map.put(new Student("net03", 26), "廣州");     Set<Student> set = map.keySet();    Iterator<Student> it = set.iterator();    while (it.hasNext()) {      Student stu = it.next();      String name = stu.getName();      int age = stu.getAge();      String address = map.get(stu);      System.out.println(name + ":" + age + ":" + address);    }   } }結果:java01:24:南京java03:23:北京net02:21:上海net03:26:廣州


 

5. 練習

 

packagewww.fuxi.jihe; importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;importjava.util.Set; public classMapDemo {      public static void main(String[] args) {           String str ="ahjdkdmkamkmixkxmcsnlasickdj";           char[] cs = str.toCharArray();           HashMap<Character, Integer> map= new HashMap<Character, Integer>();           for (char c : cs) {                 if (map.containsKey(c)) {                      Integer count =map.get(c);// 取出此字元對應的數量                      count++;// 數量++                      map.put(c, count);// 然後重新添加裡面,覆蓋原來的                 } else {                      map.put(c, newInteger(1));// 開始數量為1                 }           }            StringBuffer bu = new StringBuffer();            Set<Character> set =map.keySet();           Iterator<Character> it =set.iterator();           while (it.hasNext()) {                 Character c = it.next();                 Integer count = map.get(c);                 bu.append(c).append("(").append(count).append(")");           }           System.out.println(bu);      }}結果:d(3)s(2)c(2)a(3)n(1)l(1)m(4)j(2)k(5)h(1)x(2)i(2)


 

 

6. 類比學校

 

package www.fuxi.jihe; import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Set; class CollegeStudent {private Stringnum;private Stringname; CollegeStudent(Stringnum, String name) {      super();      this.num =num;      this.name =name;} public StringgetNum() {      return num;} public StringgetName() {      returnname;} } public class Demo {public staticvoid main(String[] agrs) {      /* 學校 */      HashMap<String,List<CollegeStudent>> bdxy = new HashMap<String,List<CollegeStudent>>();      List<CollegeStudent>ruanjian = new ArrayList<CollegeStudent>();// 軟體班      List<CollegeStudent>jiying = new ArrayList<CollegeStudent>();// 計應班      /* 把班級添加到學校中 */      bdxy.put("ruanjian",ruanjian);      bdxy.put("jiying",jiying);      /*向班級中新增學生*/      ruanjian.add(newCollegeStudent("110","zhansgan") );      ruanjian.add(newCollegeStudent("111","lisi") );      ruanjian.add(newCollegeStudent("112","王五"));      jiying.add(newCollegeStudent("210","wangang") );      jiying.add(newCollegeStudent("211","wangemi") );      jiying.add(newCollegeStudent("212","xiaoqiang") );      /* 遍曆學校中的班級,然後讀取班級中的學生資訊 */       Set<String>set = bdxy.keySet();// 擷取班級名稱集合      Iterator<String>it = set.iterator();      while(it.hasNext()) {            StringClassName = it.next();            List<CollegeStudent>ClassInfo = bdxy.get(ClassName);// 獲得班級            System.out.println(ClassName);            show(ClassInfo);      }} /* 輸出班級的學生 */public staticvoid show(List<CollegeStudent> list) {      Iterator<CollegeStudent>it = list.iterator();      while(it.hasNext()) {            CollegeStudentstu = it.next();            System.out.println("  |-"+stu.getNum() + ":" +stu.getName());      }}} 結果:jiying    |-210:wangang    |-211:wangemi    |-212:xiaoqiangruanjian    |-110:zhansgan    |-111:lisi    |-112:王五


 7.補充知識點


package www.fuxi.jihe; import java.util.HashMap;import java.util.Map; public class Text {  public static void main(String[] args) {    Map<String,String> map=new HashMap<String,String>();       map.put("110", "zhangsan");    map.put("111", "lisi");    map.put("112", "wangwu");    System.out.println("集合:"+map);    /*boolean isEmpty()判斷是否為空白*/    System.out.println(map.isEmpty());    /*int size()判斷集合中映射關係的個數*/    System.out.println("大小:"+map.size());  } } 結果:集合:{112=wangwu, 110=zhangsan, 111=lisi}false大小:3 



 

 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.