java中的Map接口
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>
还没有评论,来说两句吧...