最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java之HashMap.values()轉(zhuǎn)List時(shí)的錯誤和正確演示

 更新時(shí)間:2023年03月22日 09:25:29   作者:Archie_java  
這篇文章主要介紹了Java之HashMap.values()轉(zhuǎn)List時(shí)的錯誤和正確演示,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

HashMap.values()轉(zhuǎn)List時(shí)的錯誤和正確演示

因?yàn)轫?xiàng)目中需要獲取到Map的值的集合,所以調(diào)用了HashMap.values()方法轉(zhuǎn)成List,當(dāng)時(shí)是使用了以下代碼。

(邏輯上這樣想應(yīng)該沒問題,但生活總是會是不是給你一點(diǎn)小“”驚喜“”)

List<AreaItemOpt> areaItemOpts = (List<AreaItemOpt>) areaItemOptMap.values();
return areaItemOpts;

懷著喜悅的心情在測試環(huán)境中運(yùn)行之后,它報(bào)錯了!

報(bào)錯如下:

java.lang.ClassCastException: java.util.HashMap$Values cannot be cast to java.util.List

錯誤原因

于是翻了一下values()方法的源碼

public Collection<V> values() {
      Collection<V> vs = values;
      return (vs != null ? vs : (values = new Values()));
  }

原來values()方法只是返回了一個(gè)Collection集合,可是如程序中的用法所示,在向下轉(zhuǎn)型的時(shí)候出現(xiàn)了類型轉(zhuǎn)換錯誤。

解決方法

在ArrayList中,有一個(gè)構(gòu)造函數(shù)

public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        if ((size = elementData.length) != 0) {
            // c.toArray might (incorrectly) not return Object[] (see 6260652)
            if (elementData.getClass() != Object[].class)
                elementData = Arrays.copyOf(elementData, size, Object[].class);
        } else {
            // replace with empty array.
            this.elementData = EMPTY_ELEMENTDATA;
        }
    }

可以接受一個(gè)集合類型的參數(shù),然后返回一個(gè)list;這樣就達(dá)到了預(yù)期目的。

代碼如下:

List<AreaItemOpt> areaItemOpts = new ArrayList<>(areaItemOptMap.values());
return areaItemOpts;

測試通過~

發(fā)現(xiàn)還有一種方法也可以解決這個(gè)問題:

 List<T> list=(List<T>) Arrays.asList(map.values().toArray());//先轉(zhuǎn)數(shù)組再轉(zhuǎn)list

Map的Value值轉(zhuǎn)換為List集合

不多廢話,直接看代碼,有注解

public class Map轉(zhuǎn)List {
? ? public static void main(String[] args) {
? ? ? ? //開辟空間
? ? ? ? HashMap<Integer,String> hashMap = new HashMap<Integer,String>();
? ? ? ? //存入數(shù)據(jù)
? ? ? ? hashMap.put(1,"張三");
? ? ? ? hashMap.put(2,"李四");
? ? ? ? hashMap.put(3,"王五");
? ? ? ? //使用Collection類型接收HashMap的Value值
? ? ? ? Collection<String> collection = hashMap.values();
? ? ? ? //把Collection對象作為參數(shù)傳入ArrayList構(gòu)造方法完成類型轉(zhuǎn)換
? ? ? ? ArrayList<String> arrayList = new ArrayList<String>(collection);
? ? ? ? //輸出測試
? ? ? ? System.out.println(arrayList.toString());
? ? }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

金堂县| 克什克腾旗| 兴化市| 仙游县| 江西省| 商水县| 三亚市| 新巴尔虎右旗| 石屏县| 综艺| 乌兰察布市| 大冶市| 会昌县| 加查县| 屯昌县| 班戈县| 丰顺县| 延长县| 昭平县| 天柱县| 内江市| 绥江县| 定安县| 顺昌县| 大悟县| 长垣县| 道孚县| 抚州市| 平乡县| 瑞丽市| 济阳县| 酉阳| 清水县| 左贡县| 武义县| 武城县| 商丘市| 育儿| 当涂县| 甘南县| 新竹县|