Java map的学习及代码示例

时间:2022-05-29 17:55:34

前言

最近正在做的高校云平台项目中接触Map比较多,关于map的使用不是很熟悉,所以在此将map的几个方法再次学习下。

Map与Collection

提到Map集合接口就不能不提到Collection集合接口,map和Collection都是集合接口,Collection中包含了我们经常用的list和set子接口;而Map是与Collection处于平级的地位;Collection中存储的是一组对象,而Map存储的是一个键值对(key/value).

Map

java为数据结构中的映射定义了一个接口java.util.Map
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。

Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。

在Map对象中,Key是唯一的,不可重复的。null也可以作为key,但这样的key只能有一个;但是可以有一个或多个key所对应的value都是null。

常用API: 

 

clear() 从 Map 中删除所有映射
remove(Object key) 从 Map 中删除键和关联的值
put(Object key, Object value) 将指定值与指定键相关联
putAll(Map t) 将指定 Map 中的所有映射复制到此 map
entrySet() 返回 Map 中所包含映射的 Set 视图。Set 中的每个元素都是一个 Map.Entry 对象,可以使用 getKey() 和 getValue() 方法(还有一个 setValue() 方法)访问后者的键元素和值元素
keySet() 返回 Map 中所包含键的 Set 视图。如果要删除 Set 中的元素还将会删除 Map 中相应的映射(键和值)
values() 返回 map 中所包含值的 Collection 视图。如果要删除 Collection 中的元素还将会删除 Map 中相应的映射(键和值)
get(Object key) 返回与指定键关联的值
containsKey(Object key) 如果 Map 包含指定键的映射,则返回 true
containsValue(Object value) 如果此 Map 将一个或多个键映射到指定值,则返回 true
isEmpty() 如果 Map 不包含键-值映射,则返回 true
size() 返回 Map 中的键-值映射的数目

 

当我们想判断map中是否存在某个key时,可以用方法containsKey()来判断,同样想判断是否存在value时用方法containsValue()来判断;代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
    Map< Serializable, Serializable > map = new HashMap< Serializable, Serializable >();
    map.put(null,null);
    map.put("a", "1");
    map.put("b", "2");
    map.put("c", "3");
    if (map.containsKey("a")) {
        System.out.println("Key=Ture");
        if (map.containsValue("1")) {
            System.out.println("value=Ture");
        }
    }
}

执行结果是:
Key=Ture value=Ture

Map中提供了一些常用的方法来取出Map中的数据,用的比较多的比如:entrySet()方法,;entrySet()的返回值是个Set集合,此集合的类型为Map.Entry。Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
    Map< Serializable, Serializable > map = new HashMap< Serializable, Serializable >();
    map.put(null,null);
    map.put("a", "1");
    map.put("b", "2");
    map.put("c", "3");
    Set<Entry<Serializable, Serializable>> entrySet= map.entrySet();
    System.out.println("entrySet="+entrySet);
    for (Entry key : entrySet) {
        System.out.println("key.getKey="+key.getKey()+" key.getValue()="+ key.getValue());
    }
}

执行的结果如下:

entrySet=[null=null, a=1, b=2, c=3]
key.getKey=null key.getValue()=null
key.getKey=a key.getValue()=1
key.getKey=b key.getValue()=2
key.getKey=c key.getValue()=3

接下来要说的是keySet方法,keySet()方法返回值是Map中key值的集合,然后可以通过get(key)遍历来获取value值,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
    Map< Serializable, Serializable > map = new HashMap< Serializable, Serializable >();
    map.put(null,null);
    map.put("a", "1");
    map.put("b", "2");
    map.put("c", "3");
     
    Set keySet= map.keySet();
    System.out.println("keySet="+keySet);
    for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
      Object key = (Object) iterator.next();
      Object value = map.get(key);
      System.out.println("key = "+key+ " value="+value);
    }
  }

执行的结果如下:

keySet=[null, a, b,c]
key = null value=null
key = a value=1
key = b value=2
key = c value=3

最后要说的是,map还有一个values()方法,values()方法返回值是Map中value值的集合,通过遍历可以取出value的值,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
    Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();
    map.put(null, null);
    map.put("a", "1");
    map.put("b", "2");
    map.put("c", "3");
    Collection c = map.values();
    System.out.println("map.values()=" + map.values());
    for (Iterator iterator = c.iterator(); iterator.hasNext();) {
        Object value = (Object) iterator.next();
        System.out.println("value="+value);
    }
}

代码执行结果如下:

map.values()=[null,1, 2, 3]
value=null
value=1
value=2
value=3

自己做的一个利用map进行hql语句拼接的小例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class HqlMap {
    public static void main(String[] args) {
        Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();
        map.put("isDelete", 0);
        map.put("roomTypeName", "test");
        Map<Serializable, Serializable> map1 = new HashMap<Serializable, Serializable>();
        StringBuilder hqlBuilder = new StringBuilder();
        hqlBuilder.append(" from Build ");
        String hql = "" ;
        if (map.isEmpty()) {
            hql=hqlBuilder.toString();
        } else {
            hqlBuilder.append(" where ");
            Set keySet = map.keySet();
            for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
                Object key = (Object) iterator.next();
                hqlBuilder.append(key + "=:" + key + " and ");
            }
            //去掉最后的一个and
            int lastIndex = hqlBuilder.lastIndexOf("and");
            if (lastIndex > -1) {
                hql = hqlBuilder.substring(0, lastIndex)
                            + hqlBuilder.substring(lastIndex + 3,
                                hqlBuilder.length());
            }
        }
        System.out.println(hql);
    }
}

总结

本文主要介绍了Map集合中entrySet()方法与keySet()、value()方法的使用,其中前两者取出的都是key和value的映射关系,只有最后的values取出的是集合中所以的值,没有键,也就没有了对应的映射关系。

以上就是本文关于Java map的学习及代码示例的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。

原文链接:http://blog.csdn.net/zwk626542417/article/details/42290625