Map(映射):Map的KeySet()方法会返回key的集合,因为Map的键不能重复,因此keySet()方法的返回类型是Set;而Map的值是可以重复的,因此values()方法的返回类型Collection,可以容纳重复的元素。
package com.test.array; import java.util.HashMap; public class HashMapTest { public static void main(String[] args) { HashMap map = new HashMap(); map.put("a", "zhangsan"); map.put("b", "lisi"); map.put("c", "wangwu"); map.put("a", "zhaoliu"); System.out.println(map); } }
打印出的结果是:
{a=zhaoliu, c=wangwu, b=lisi}
没打印出zhangsan,是因为键a的值被zhaoliu覆盖了。
如果从一个不存在的键中获取值,则会打印出null
String value = (String) map.get("s"); //s并不存在 System.out.println(value);
通过迭代key值取得value
package com.test.array; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class KeyIterTest { public static void main(String[] args) { HashMap map = new HashMap(); map.put("a", "aa"); map.put("b", "bb"); map.put("c", "cc"); map.put("d", "dd"); Set keySet = map.keySet(); for (Iterator iters = keySet.iterator(); iters.hasNext();) { String key = (String)iters.next(); String value = (String)map.get(key); System.out.println(key +"="+value); } } }
Map的entrySet() 方法返回一个Set集合,里面包含Map的键值对的对象。
Entry是HashMap的一个内部类。可以通过获取entry来取得HashMap的键与值。
package com.test.array; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class HashMapTest { public static void main(String[] args) { HashMap map = new HashMap(); map.put("a", "zhangsan"); map.put("b", "lisi"); map.put("c", "wangwu"); map.put("a", "zhaoliu"); Set set = map.entrySet(); for(Iterator iter = set.iterator();iter.hasNext();){ Map.Entry entry = (Map.Entry)iter.next(); String key = (String)entry.getKey(); String value = (String)entry.getValue(); System.out.println(key +" = "+value); } } }
TreeMap:TreeMap是对键进行排序。
3,使用Map生成随机数排序测试:
随机生成50个数字(整数),每个数字的范围是【10,50】,统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来。如果某个出现的次数是0,则不打印它。打印时按照数字的升序排列。
package com.test.array; import java.util.List; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.TreeMap; public class HashMapTest { public static void main(String[] args) { Random random = new Random(); Map map = new TreeMap(); for (int i = 0; i < 50; i++) { int number = random.nextInt(41) + 10; if (map.get(new Integer(number)) != null) { // 不是第一次出现,已经有值了 map.put(new Integer(number), ((Integer) map.get(new Integer( number))).intValue() + 1); } else { // 第一次出现,将其值设为1 map.put(new Integer(number), new Integer(1)); } } // 打印结果 格式为 "键=值" Set set = map.entrySet(); List list = new ArrayList(); // 打印出现次数最多的数字 Collection cols = map.values(); Integer maxNumber = (Integer) Collections.max(cols); for (Iterator iter = set.iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) (iter.next()); Integer value = (Integer) entry.getValue(); if (maxNumber.intValue() == value.intValue()) { list.add(entry.getKey()); } System.out.println(entry.getKey() + " =" + entry.getValue()); } System.out.println("出现最多次数为: "+maxNumber.intValue()); System.out.print("这些数字分别是:"); for (int k = 0; k < list.size(); k++) { System.out.print(list.get(k)+" "); } } }