我们在平时的业务处理中,List、Map两个集合的使用率应该是最高的。对于List的遍历非常非常的简单,但是对于Map的遍历就有很多情况。由于昨天自己在读取redis中数据的时候,发现取出来的hash类型的数据的值是一个Map集合,提交代码以后发现代码写的过于冗余,于是便进行了修改,也顺便记录一下对于Map.Entry方法的使用。
Map是java中的接口,Map.Entry是Map的一个内部接口。
Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
我们每次遍历Map集合中的数据的时候,往往更多的时候会使用如下代码,也就是每次从Map中取出来key,然后根据key通过get(key)的方法去获取每一个键的值:
@Test
public void test02(){
Map<Integer,String> map = new HashMap<>();
map.put(1, "莫德里奇");
map.put(2, "罗纳尔多");
map.put(3, "马拉多纳");
map.put(4, "克鲁伊维特");
Set keys = map.keySet( );
if(keys != null) {
Iterator iterator = keys.iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
Object value = map.get(key);
System.out.println(key + "---" + value);
}
}
}
程序的输出结果是显而易见的:
1---莫德里奇
2---罗纳尔多
3---马拉多纳
4---克鲁伊维特
这个方法有一个问题。从Map中取得关键字之后,我们必须每次重复返回到Map中取得相对的值,这是很繁琐和费时的。当数据量上来了以后,此方法会成指数倍的增加时间。如果我们在遍历集合的方法内部还需要遍历集合时,那么此种方法将变得非常的笨重。
不过Java给我们提供了一个更加简单的途径。Map类提供了一个名为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集。接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法,因此,上面的代码可以被组织得更符合逻辑。
@Test
public void test02(){
Map<Integer,String> map = new HashMap<>();
map.put(1, "莫德里奇");
map.put(2, "罗纳尔多");
map.put(3, "马拉多纳");
map.put(4, "克鲁伊维特");
Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
for (Map.Entry<Integer, String> entry : entrySet) {
System.out.println(entry.getKey() + "==>" + entry.getValue());
}
}
类比于第一个方法来看,此方法的简便性要高于第一种遍历,而且第二种方式我们拿到的就是Map集合中的一个entry,也就是一对键值对,我们只需要选择我们需要的是key还是value,可以通过getKey()和getValue()方法来获取它们,避免了我们每次都通过key去拿value的过程。
另外,Map.Entry同时也提供了一个setValue()方法,程序员可以使用它修改map里面的值。
在此也说一个关于Map的另外一个只获取key的方法。Map提供了一个keySet()方法,此方法返回为一个Set集合,泛型为Map的key的数据类型。
@Test
public void test02(){
Map<Integer,String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.put(4, "d");
Set<Integer> integers = map.keySet();
for (Integer integer : integers) {
System.out.println(integer);
}
}
程序的输出如下:
1
2
3
4
好了,今天就先写到这了。自己本身是一个每天奔波于公司和家的小菜鸟,不为了能取得多大的成功,只希望为了心中的梦想而努力奋斗。努力不一定成功,最坏的结果也只是大器晚成。加油!!