目录
一、Map的特点
无序、以键值对的形式添加元素,键不能重复,值可以重复。它没有继承Collection接口
二、Map的遍历方式
1、获取map集合中所有key的set集合,再通过key获取值value
Map<String, Object> map = new HashMap<String, Object>(); map.put("艾斯", "撒旦"); map.put("全文", "从v"); map.put("这些", "体育件"); map.put("二方", "体育"); //map集合的遍历方式 1.获取map集合中所有key的set集合,再通过key获取值value Set<String> keySet = map.keySet(); for (String key : keySet) { //通过键获取对应的值 Object value = map.get(key); System.out.println(key+"="+value); }
2、先取出保存所有键值对(Entry)的Set,再遍历此Set即可 (重要点)
Map<String, Object> map = new HashMap<String, Object>(); map.put("艾斯", "撒旦"); map.put("全文", "从v"); map.put("这些", "体育件"); map.put("二方", "体育"); //map遍历方式2.先取出保存所有键值对(Entry)的Set,再遍历此Set即可 (重要点) Set<Entry<String, Object>> entrySet = map.entrySet(); for (Entry<String, Object> entry : entrySet) { System.out.println(entry); System.out.println(entry.getKey()); System.out.println(entry.getValue()); }
三、HashMap与HashTable之间的区别
1、HashTable
同步既排队 ,线程是安全的
键不可以为null,值也不能为null
2、HashMap
异步,线程是不安全的
键可以为null,值也可以为null
四、Map集合3层嵌套使用(2Map+1List)小案例
1、Student.java
public class Student implements Serializable{ /** * */ private static final long serialVersionUID = 4682477983251791848L; private String name; private Integer source; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSource() { return source; } public void setSource(Integer source) { this.source = source; } public Student() { // TODO Auto-generated constructor stub } @Override public String toString() { return "Student [name=" + name + ", source=" + source + "]"; } public Student(String name, Integer source) { super(); this.name = name; this.source = source; } }
2、
public static void main(String[] args) { Map<String, Map<String,List<Student>>> map = new HashMap<String, Map<String,List<Student>>>(); //==================================================================== List<Student> als = new ArrayList<Student>(); als.add(new Student("张晓东",90)); als.add(new Student("张晓西",75)); List<Student> bls = new ArrayList<Student>(); bls.add(new Student("张晓北",80)); bls.add(new Student("张晓南",82)); Map<String, List<Student>> amap = new HashMap<String, List<Student>>(); amap.put("T110", als); amap.put("T111", bls); //==================================================================== List<Student> cls = new ArrayList<Student>(); cls.add(new Student("张三",90)); cls.add(new Student("李四",100)); List<Student> dls = new ArrayList<Student>(); dls.add(new Student("王五",70)); dls.add(new Student("小六",100)); List<Student> els = new ArrayList<Student>(); els.add(new Student("小八",70)); els.add(new Student("小九",100)); Map<String, List<Student>> bmap = new HashMap<String, List<Student>>(); bmap.put("T206", cls); bmap.put("T222", dls); bmap.put("T208", els); //==================================================================== List<Student> fls = new ArrayList<Student>(); fls.add(new Student("可乐",60)); fls.add(new Student("雪碧",50)); List<Student> gls = new ArrayList<Student>(); gls.add(new Student("哇哈哈",90)); gls.add(new Student("老干妈",80)); Map<String, List<Student>> cmap = new HashMap<String, List<Student>>(); cmap.put("T230", fls); cmap.put("T231", gls); map.put("卓京初中部",amap); map.put("卓京高中部",bmap); map.put("卓京大学部",cmap); Set<String> keySet = map.keySet(); for (String key : keySet) { Map<String, List<Student>> value = map.get(key); System.out.println(key); Set<String> keySet2 = value.keySet(); for (String key2 : keySet2) { System.out.println("\t"+key2); List<Student> ls = value.get(key2); for (Student stu : ls) { System.out.println("\t\t"+stu.getName()+" "+stu.getSource()); } } } }
3、运行效果:
卓京高中部 T208 小八 70 小九 100 T206 张三 90 李四 100 T222 王五 70 小六 100 卓京大学部 T231 哇哈哈 90 老干妈 80 T230 可乐 60 雪碧 50 卓京初中部 T110 张晓东 90 张晓西 75 T111 张晓北 80 张晓南 82