Java map的学习及代码示例
前言
最近正在做的高校云平台项目中接触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()来判断;代码如下:
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方法,代码如下:
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值,代码如下:
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的值,代码如下:
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语句拼接的小例子:
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的学习及代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
如有不足之处,欢迎留言指出。