一、Map整体结构体系
Map是集合的另一大派系,与Collection派系不同的是Map集合是以键值对儿的形式存储在集合的。两个键为映射关系,
其中第一个键为主键(主键是唯一的不可重复),第二个键为value可以重复,他们两个是一对一的关系,可以存储集合或
自定义类的对象。其常用的实现类有HashMap、Properties。
二、Map接口
Map接口为该派的“掌门”,为我们提供了一些常用的集合操作:
(1)从此集合中移除所有映射关系(清空):
clear()
(2)判断此集合是否包含指定主键:
containsKey(Object key) - 返回值为boolean(true表示包含)
(3)判断此集合是否包含指定value:
containsValue(Object value) - 返回值为boolean(true表示包含)
(4)返回此集合中包含的映射关系:
entrySet() - 返回值为Set集合(用于遍历集合)
(5)比较指定的对象与此集合是否相等:
equals(Object o) - 返回值为boolean(true表示相等)
(6)根据传入的Key值获取对应的Value:
get(Object key) - 如果没有返回为空
(7)集合中是否存在此值:
isEmpty() - 返回值为boolean(true表示不包含)
(8)返回此集合的全部key:
keySet() - 返回值为包含可以的set集合(用于集合的遍历)
(9)将指定的值与此映射中的指定的key关联(赋值):
put(K key, V value)
(10)通过key删除指定的映射关系:
remove(Object key)
(11)返回此集合的映射关系数(长度):
size() - 返回值为int
(12)通过集合返回所有的value:
values() - 返回值为 Collection<V>集合
举例:
1 public static void main(String[] args) { 2 //创建2个Student1类对象 3 Student1 s1 = new Student1("zhangsan", 12); 4 Student1 s2 = new Student1("wangwu", 17); 5 //创建HashMap集合 6 HashMap<Student1, String> map = new HashMap<>(); 7 //向集合里添加 8 map.put(s1, "001"); 9 map.put(s2, "002"); 10 //获取所有的value 11 Collection<String> values = map.values(); 12 for (String string : values) { 13 System.out.println(string); 14 15 } 16 System.out.println("-----------"); 17 //通过keySet()遍历集合 18 Set<Student1> keySet = map.keySet(); 19 for (Student1 student1 : keySet) { 20 String string = map.get(student1); 21 System.out.println(string + " " + student1); 22 } 23 System.out.println("-----------------"); 24 //通过entrySet()方式便利结合 25 Set<Entry<Student1, String>> entrySet = map.entrySet(); 26 for (Entry<Student1, String> entry : entrySet) { 27 //获取value 28 String value = entry.getValue(); 29 //获取key 30 Student1 key = entry.getKey(); 31 System.out.println(value + "-" + key); 32 } 33 }
三、HashMap类
HashMap类为Map接口的实现类,方法与Map接口相同,注意主键如果为自定义类的话要重写hashCode()和
equals(Object o) 方法,原因请看我的上一篇:JAVA基础-集合(一)。
举例:
1 public static void main(String[] args) { 2 // 创建学校的HashMap,value为一个HashMap 3 HashMap<String, HashMap<String, String>> xuexiao = new HashMap<>(); 4 // 创建一班的HashMap 5 HashMap<String, String> yiban = new HashMap<>(); 6 yiban.put("001", "小白"); 7 yiban.put("002", "小黑"); 8 // 创建二班的HashMap 9 HashMap<String, String> erban = new HashMap<>(); 10 erban.put("0001", "王大崔"); 11 erban.put("0002", "花轮"); 12 // 将一班和二班添加到学校里 13 xuexiao.put("一班", yiban); 14 xuexiao.put("二班", erban); 15 // 遍历学校集合 16 Set<String> keySet = xuexiao.keySet(); 17 for (String key : keySet) { 18 HashMap<String, String> hashMap = xuexiao.get(key); 19 System.out.println(key); 20 // 遍历班级集合 21 Set<String> keySet2 = hashMap.keySet(); 22 for (String string : keySet2) { 23 String string2 = hashMap.get(string); 24 System.out.println("学号:" + string + ", 姓名:" + string2); 25 } 26 } 27 }
四、Properties类
Properties 类为 Map 接口的另一实现类,表示了一个持久的属性集。与 IO 流一起配合使用。可
对Properties对象应用 put 和 putAll 方法,但不建议使用这两个方法,因为它们允许调用者插入其键或
值不是 String 的项。他的常用方法有:
(1)用指定的键获取对应的值:
getProperty(String key) - 返回值为String
(2)将属性列表输出到指定的输出流:
list(PrintStream out或PrintWriter out)
(3)输入流中读取属性列表(键和元素对):
load(InputStream inStream或Reader reader)
(4)返回属性列表中所有键的枚举:
propertyNames() - 返回值为Enumeration<?>(用于对Properties集合的遍历)
(5)给Properties集合进行赋值:
setProperty(String key, String value)
(6)以你给出的字符和集合内容写入到文档里作为“标记”:
store(OutputStream os或Writer writer, String comments)
举例:
1 public static void main(String[] args) throws IOException { 2 // 创建Properties集合 3 Properties pp = new Properties(); 4 // 创建输出流 5 FileWriter writer = new FileWriter("c.properties"); 6 pp.setProperty("a", "1"); 7 pp.setProperty("b", "3"); 8 pp.setProperty("c", "4"); 9 // 将Properties集合里的数据写入文档,标记为Test 10 pp.store(writer, "Test"); 11 writer.close(); 12 FileReader reader = new FileReader("c.properties"); 13 Properties pp1 = new Properties(); 14 // 读取到新的Properties里 15 pp1.load(reader); 16 // 通过propertyNames()方法遍历集合 17 Enumeration<?> propertyNames = pp1.propertyNames(); 18 // 因为返回的是枚举所以用这种方法遍历 19 while (propertyNames.hasMoreElements()) { 20 String object = (String) propertyNames.nextElement(); 21 String property = pp1.getProperty(object); 22 System.out.println(object + " " + property); 23 } 24 }
写入的c.properties文件
1 #Test 2 #Fri Sep 15 21:48:27 CST 2017 3 b=3 4 a=1 5 c=4