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