目录
Map集合 Map接口中常用的方法 Map方法的使用 Map自定义类型对象的添加 Map结合List的代码优化 总结Map集合
Map集合没有继承Collection接口,它提供了key-values的映射机制。一个key只能映射一个values,并且key不能相同。
Map接口中常用的方法
方法 | 功能及描述 |
---|---|
put(K key,V values) | 向集合中添加指定的key与values的映射关系 |
containsKey(Object key) | 如果此映射关系包含指定的key,则返回true |
containsValues(Object values) | 如果次映射将一个或多个key映射到指定值,则返回true |
get(Object key) | 如果存在指定key的对象则返回对应的值,否则返回null |
keySet() | 返回集合中所有key对象形成的Set集合 |
values() | 返回集合中所有值对象形成的Collection集合 |
Map方法的使用
示例代码如下:
package test;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;public class Test2 { public static void main(String[] args) { // TODO Auto-generated method stub Mapmap = new HashMap<>(); map.put("陈小春", "32");//向Map集合中添加对象实例 map.put("渣渣辉", "20"); map.put("苦甜乐", "19"); map.put("陈小春", "40"); //遍历输出所有的键以及对应的值 for (Entry string : map.entrySet()) { System.out.println(string); } System.out.println("containsKey(Object key)="+map.containsKey("陈小春"));//存在指定key,返回true System.out.println("containsKey(Object key)="+map.containsKey("成龙"));//不存在指定key,返回false System.out.println("containsValues(Object values)="+map.containsValue("32"));//存在指定values,返回true System.out.println("containsValues(Object values)="+map.get("陈小春"));//不存在指定key,返回false Set set1 = map.keySet();//构建Map集合中所有key的集合 Iterator iterator = set1.iterator();//创建集合迭代器 //遍历输出 while(iterator.hasNext()) { System.out.println("key="+iterator.next()); } Collection set2 = map.values();//构建Map集合中所有key对象 //遍历输出 for (String string : set2) { System.out.println(string); } }}
Map自定义类型对象的添加
示例代码如下:
package com.vince;public class Student1 { private String name; private char sex; private Integer age; public String getName() { return name; } public char getSex() { return sex; } public Integer getAge() { return age; } public Student1(String name, char sex, Integer age) { super(); this.name = name; this.sex = sex; this.age = age; } @Override public String toString() { return "姓名:" + getName() + "\t性别:" + sex + "\t年龄:" + age; }}
package test;import java.util.HashMap;import java.util.Map;import com.vince.Student1;public class Test3 { public static void main(String[] args) { // TODO 向Map集合中存放自定义类型 // key的存放特点与Set一致,不能重复存放 // 当出现相同的key时,对应的values会被覆盖 Mapset = new HashMap<>(); set.put("001", new Student1("程晓春", '男', 50)); set.put("002", new Student1("古天乐", '男', 50)); set.put("003", new Student1("渣渣辉", '男', 30)); set.put("001", new Student1("程晓春", '女', 26)); for (String key : set.keySet()) { System.out.println("" + key + "" + set.get(key)); } }}
Map结合List的代码优化
以List为例代码如下:
package com.vince;public class Student { private Integer studentNumber; private String name; private char sex; private Integer age; public Integer getStudentNumber() { return studentNumber; } public String getName() { return name; } public char getSex() { return sex; } public Integer getAge() { return age; } public Student(Integer studentNumber, String name, char sex, Integer age) { super(); this.studentNumber = studentNumber; this.name = name; this.sex = sex; this.age = age; } @Override public String toString() { return "学号:" + getStudentNumber() + "\t姓名:" + getName() + "\t性别:" + sex + "\t年龄:" + age; }}
package test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.vince.Student;public class pratice3 { public static void main(String[] args) { // TODO Auto-generated method stub // TODO 使用集合存放两个班级的学生,要求每个班级中有三个学生 // 能够单独获得每个班级的学生信息,同时能够直接获得所有学生信息 Listclass1 = new ArrayList<>(); class1.add(new Student(11, "小胡", '男', 11)); class1.add(new Student(12, "小林", '女', 22)); class1.add(new Student(13, "小白", '男', 21)); List class2 = new ArrayList<>(); class2.add(new Student(21, "小红", '女', 11)); class2.add(new Student(25, "小明", '男', 14)); class2.add(new Student(23, "小琴", '女', 18)); Map > className = new HashMap<>(); className.put("一班", class1); className.put("二班", class2); //输出一班的学生 for (Student student : class1) { System.out.println(student); } System.out.println(); //输出添加后学生的所有信息 class1.add(new Student(32,"王五",'男',32)); for (String key : className.keySet()) { for (Student student : className.get(key)) { System.out.println(key+student); } } }}
总结
Map接口常用的实现类有HashMap和TreeMap,由于HashMap实现向Map集合中添加和删除映射关系效率更高,所以一般使用HashMap较多。TreeMap中的映射关系存在一定的顺序,如果想使Map集合中的对象也存在一定的顺序,则考虑使用TreeMap实现Map集合。
HashMap构造方法中有一个默认的初始容量(16)和默认的加载因子(0.75)的空的构造方法,也可以使用带参的HashMap构造方法设定初始容量值和加载因子。加载因子的范围在0~1之间,加载因子越大查询的效率越低,加载因子越小,查询效率就越高,对内存的要求就越高。 向Map集合中添加对象实例是通过put(K key,V values)方法来实现的。对Map集合中的对象实例的遍历有两种方式: 方式一:通过keySet()方法来获得key的集合,再根据get(key)的方法来获得values的值。Setkeys = map.KeySet();map.get(key);
方式二:通过entrySet()获得所有的key和values的值。
Set> etries = map.entrySet();getKey(),getVaues();