Java数据结构(一)Java Map接口

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]

猜你喜欢

转载自blog.csdn.net/qq_20519319/article/details/88119472
今日推荐