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)+" ");
}
}
}