java中的Map接口
实现Map接口的类用来存储——键值对
Map接口的实现类有HashMap和TreeMap等
键值不能重复(键相当与索引)
TestMap.java
import java.util.*; //Map方法举例 public class TestMap { public static void main(String[] args) { Map m1 = new HashMap(); //put("K","V"),键——值 m1.put("one",new Integer(1)); m1.put("two",new Integer(2)); m1.put("three",new Integer(3)); Map m2 = new TreeMap(); m2.put("A",new Integer(1)); m2.put("B",new Integer(2)); //size()大小 System.out.println(m1.size());//3 //containsKey,包含Key System.out.println(m1.containsKey("one"));//true //containsValue,包含Value System.out.println(m2.containsValue(new Integer(1)));//true if(m1.containsKey("two")){ //get(),通过K找到对象,对象在调用intValue(),得到int值 int i = ((Integer)m1.get("two")).intValue(); System.out.println(i);//2 } //将m1 copy到 m3,再将m2放入m3 Map m3 = new HashMap(m1); m3.putAll(m2); System.out.println(m3);//{A=1, B=2, two=2, three=3, one=1},没有顺序 } }
F:\java>javac TestMap.java 注: TestMap.java使用了未经检查或不安全的操作。 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。 F:\java>java TestMap 3 true true 2 {A=1, B=2, two=2, three=3, one=1} F:\java>
Auto-boxing/unboxing
自动打包/解包
TestM.java
import java.util.*; public class TestM { public static void main(String args[]) { //自动打包/解包 Map m1 = new HashMap(); Map m2 = new TreeMap(); //m1.put("one",new Integer(1)); //put("one", 1)中的“1”不是int型的值,而是自动打包为“对象” m1.put("one", 1); //m1.put("two",new Integer(2)); m1.put("two", 2); //m1.put("three",new Integer(3)); m1.put("three", 3); //m2.put("A",new Integer(1)); m2.put("A", 1); //m2.put("B",new Integer(2)); m2.put("B", 2); System.out.println(m1.size()); System.out.println(m1.containsKey("one")); System.out.println //(m2.containsValue(new Integer(1))); (m2.containsValue(1)); if(m1.containsKey("two")) { //int i = ((Integer)m1.get("two")).intValue(); //自动解包,(Integer)m1.get("two") int i = (Integer)m1.get("two"); System.out.println(i); } Map m3 = new HashMap(m1); m3.putAll(m2); System.out.println(m3); } }
F:\java>javac TestM.java 注: TestM.java使用了未经检查或不安全的操作。 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。 F:\java>java TestM 3 true true 2 {A=1, B=2, two=2, three=3, one=1} F:\java>
计算args数组中元素重复的个数
TestArgsWords.java
import java.util.*; /* 计算args数组中元素重复的个数 */ public class TestArgsWords { private static final Integer ONE = new Integer(1); public static void main(String args[]) { Map m = new HashMap(); for (int i = 0; i < args.length; i++) { //拿到args的值,不存在时freq = null Integer freq = (Integer) m.get(args[i]); //将args的值放入map中,(K,V) m.put(args[i],(freq == null? ONE : new Integer(freq.intValue() + 1))); } //打印m的大小 System.out.println(m.size() + " distinct words detected:"); //打印m的内容 System.out.println(m); } }
F:\java>javac TestArgsWords.java 注: TestArgsWords.java使用了未经检查或不安全的操作。 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。 F:\java>java TestArgsWords 0 distinct words detected: {} F:\java>java TestArgsWords aa aab aa aa sss aa db aa 4 distinct words detected: {aa=5, sss=1, aab=1, db=1} F:\java>
用自动打包解包,改写上面的方法
TestArgsWords.java
import java.util.*; /* 计算args数组中元素重复的个数 改写为自动打包解包的形式 */ public class TestArgsWords { //private static final Integer ONE = new Integer(1); private static final int ONE = 1; public static void main(String args[]) { Map m = new HashMap(); for (int i = 0; i < args.length; i++) { //拿到args的值,不存在时freq = null //Integer freq = (Integer) m.get(args[i]); //如果m.get()中的值为空,赋值为0 int freq = (Integer) m.get(args[i]) == null ? 0 : (Integer) m.get(args[i]); //将args的值放入map中,(K,V) //m.put(args[i],(freq == null? ONE : new Integer(freq.intValue() + 1))); m.put(args[i], freq==0 ? ONE : freq + 1); } //打印m的大小 System.out.println(m.size() + " distinct words detected:"); //打印m的内容 System.out.println(m); } }
F:\java>javac TestArgsWords.java 注: TestArgsWords.java使用了未经检查或不安全的操作。 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。 F:\java>java TestArgsWords aa aab aa aa sss aa db aa 4 distinct words detected: {aa=5, sss=1, aab=1, db=1} F:\java>