前言
最近正在做的高校云平台项目中接触Map比较多,关于map的使用不是很熟悉,所以在此将map的几个方法再次学习下。
Map与Collection
提到Map集合接口就不能不提到Collection集合接口,map和Collection都是集合接口,Collection中包含了我们经常用的list和set子接口;而Map是与Collection处于平级的地位;Collection中存储的是一组对象,而Map存储的是一个键值对(key/value).
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
相关文章
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
基于Springboot+Junit+Mockito做单元测试的示例
2025-05-29 69 -
2025-05-25 58
-
2025-05-29 60
-
2025-05-29 67
-
2025-05-29 82

