题目:提供一个方法,用于遍历获取HashMap<String,String>中的所有value,并存放在List中返回(考虑上集合中泛型的使用)。
package com.xxx.exer1;
import java.util.*;
public class ListText {
public static void main(String[] args){
Map<String,String> map = new HashMap<>();
map.put("张三","法外狂徒");
map.put("李四","有问题吗?");
map.put("王五","没有问题");
List<String> List1 = getValueList((HashMap<String, String>) map);//由于getValueList是静态方法,故可以不造对象(对类实例化),直接调用,将map中的key和value传入getValueList中,即可得到所有value
System.out.println(List1);
}
//返回 map 中存放的所有value
public static List<String> getValueList(HashMap<String,String> map){
//错误的:
// Collection<T> values = map.values();//value返回Collection
// return (List<T>) values;//Collection是List的父类,父类不能赋给子类List,即父类不能强转为子类(子类可以强制转换为对应的父类,但父类是不能够强制转换为对应的子类)(多态)
//正确的:
ArrayList<String> ValueList = new ArrayList<>();//ValueList:用来存放所有遍历的value
Collection<String> values = map.values();//先找出所有value构成的collection
for(String t : values){//遍历map中的values,装到ValueList中
ValueList.add(t);
}
return ValueList;
}
}
这里有个trick,代码写为:
package com.xxx.exer1;
import java.util.*;
public class ListText {
public static void main(String[] args){
Map<String,String> map = new HashMap<>();
map.put("张三","法外狂徒");
map.put("李四","有问题吗?");
map.put("王五","没有问题");
List<String> List1 = getValueList((HashMap<String, String>) map);//由于getValueList是静态方法,故可以不造对象(对类实例化),直接调用,将map中的key和value传入getValueList中,即可得到所有value
System.out.println(List1);
}
//返回 map 中存放的所有value
public static List<String> getValueList(HashMap<String,String> map){
//错误的:
Collection<String> values = map.values();//value返回Collection
return (List<String>) values;//Collection是List的父类,父类不能赋给子类List,即父类不能强转为子类(子类可以强制转换为对应的父类,但父类是不能够强制转换为对应的子类)
// //正确的:
// ArrayList<String> ValueList = new ArrayList<>();//ValueList:用来存放所有遍历的value
// Collection<String> values = map.values();//先找出所有value构成的collection
// for(String t : values){//遍历map中的values,装到ValueList中
// ValueList.add(t);
// }
// return ValueList;
}
}
error:
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap$Values cannot be cast to java.util.List
at com.atguigu.exer1.ListText.getValueList(ListText.java:21)
at com.atguigu.exer1.ListText.main(ListText.java:12)
即java.lang.ClassCastException: java.util.HashMap
中的Values类型是Collection,不能转换为 java.util.List
类型。因为Collection是List的父类,父类不能赋给子类List,即父类不能强转为子类(子类可以强制转换为对应的父类,但父类是不能够强制转换为对应的子类),也就是面向对象的多态。