Java Map接口
Dictionary类
Dictionary是一个抽象类(不知道啥是抽象类?),它可以用来存储键值对,只要给出给出键和值,你就可以将它存储在Dictionary对象当中,键值对一旦被存储,就可以通过它的键来获取它的值。因Dictionary类已经过时,所以本文主要对Map接口进行讲解。
Map接口
Map接口中每个键对应一个值,可以通过键来访问它的值,当给定的一组键值对存储到Map对象当中时,你就可以通过对象.get(key)
来获取key所对应的的值。
- 如何使用Map接口?
先导入包import java.util.*;
,创建一个Test类,在main方法内申明Map对象m1
。并且在其中添加了6对键值映射。当然,你也可以让多个键对应一个值,但是每个键必须对应一个值。
import java.util.*;
public class Test {
public static void main(String[] args) {
Map<String,String> m1 = new HashMap<String, String>();
Map<String,String> m2 = new HashMap<String, String>();
m1.put("key1", "value1");
m1.put("key2", "value2");
m1.put("key3", "value3");
m1.put("key4", "value4");
m1.put("key5", "value5");
m1.put("key6", "value6");
}
或许有的人会这样写:
Map m1 = new HashMap();
这时,你的IDE可能会告诉你:
HashMap is a raw type. References to generic type HashMap<K,V> should be parameterized
虽然没有报错但是出现了安全警告,它并不建议这你样做,那我们该怎么写呢?像上面申明m1
的时候,它所存储的值只能为String,如果你想在一个Map对象中存储多种类型的值,你可以这样写:
Map<String,Object> m1 = new HashMap<String,Object>();
//或者
Map m1 = new HashMap<String,Object>();
Map接口有哪些方法?
Map接口共有14个方法,下面将一 一进行解释。
void clear()
从这个映射当中移除所有映射关系。
//先向m1添加映射关系
m1.put("key1", "value1");
m1.put("key2", "value2");
m1.put("key3", "value3");
m1.put("key4", "value4");
m1.put("key5", "value5");
m1.put("key6", "value6");
//输出m1
System.out.println(m1);
//使用clear方法移除映射
m1.clear();
//再次输出m1
System.out.println(m1);
输出结果如下:
{key1=value1, key2=value2, key5=value5, key6=value6, key3=value3, key4=value4}
{}
从输出结果我们可以看到执行put方法存储数据,它的顺序不一定会按照代码顺序进行排序,当然也没这个必要,执行clear方法之后,m1
中所有的键-值映射关系被全部移除。
boolean containsKey(Object k)
如果此映射当中包含指定映射,返回true,否则返回false。
System.out.println(m1.containsKey("key3"));//m1包含“key3”
System.out.println(m1.containsKey("key10"));//m1不包含“key10”
输出结果如下:
true
false
boolean containsValue(Object v)
如果此映射当中有多个或一个键映射到指定值,返回true,否则返回false。
System.out.println(m1.containsValue("value3"));//有对应
System.out.println(m1.containsValue("value"));//无对应
输出结果如下:
true
false
Set entrySet( )
返回此映射中包含映射关系的Set视图。
System.out.println(m1.entrySet());
输出结果如下:
[key1=value1, key2=value2, key5=value5, key6=value6, key3=value3, key4=value4]
boolean equals(Object obj)
与指定对象比较是否相等。
//此时m2中没有映射
System.out.println(m1.equals(m2));
//将m1中的映射复制到m2中
m2.putAll(m1);
System.out.println(m1.equals(m2));
输出结果如下:
false
true
Object get(Object k)
获取指定键的值,若键不存在,则返回null。
System.out.println(m1.get("key2"));
System.out.println(m1.get("asd"));
输出结果如下:
value2
null
int hashCode( )
返回此映射的哈希码。
System.out.println(m1.hashCode());
输出结果如下:
-653383692
boolean isEmpty( )
判断此映射是否为空,若为空,返回true。
System.out.println(m1.isEmpty());
//清除m1中所有映射
m1.clear();
System.out.println(m1.isEmpty());
输出结果如下:
false
true
Set keySet( )
返回此映射当中包含键的Set视图。
System.out.println(m1.keySet());
输出结果如下:
[key1, key2, key5, key6, key3, key4]
Object put(Object k, Object v)
将指定的值与映射当中指定的键相关联,既可以用来添加一个映射,也可以用来修改键的值。
m1.put("key7", "value7");
System.out.println(m1.get("key7"));
输出结果如下:
value7
void putAll(Map m)
将指定映射中所有的映射关系复制到此映射当中。
m2.putAll(m1);
System.out.println(m2);
输出结果如下:
{key1=value1, key2=value2, key5=value5, key6=value6, key3=value3, key4=value4}
Object remove(Object k)
若此映射中存在指定键,则将其从此映射中删除。
//删除前
System.out.println(m1);
//删除后
m1.remove("key1");
System.out.println(m1);
输出结果如下:
{key1=value1, key2=value2, key5=value5, key6=value6, key3=value3, key4=value4}
{key2=value2, key5=value5, key6=value6, key3=value3, key4=value4}
int size( )
返回此映射中包含多少键-值映射关系。
System.out.println(m1.size());
输出结果如下:
6
Collection values( )
返回此映射中包含值的Collection视图。
System.out.println(m1.values());
输出结果如下:
[value1, value2, value5, value6, value3, value4]