泛型方法应用Map的问题

泛型方法应用Map的问题

问题描述:

课程演示了使用泛型方法讲数组转化为List。List,Set,Queue都是单值,都很像。然后我想到Map存的是两个值,它是不一样的,它对泛型的使用时也多了一个数据。所以我想尝试使用泛型方法讲2个数组转化为Map。我尝试写出了代码,输出也正确。但是我不知道自己对于泛型方法对Map类型的应用使用是否正确。请问还有没有可以优化改进的地方。


尝试过的解决方式:

public class PtMethod {
    //泛型方法,要求返回值类型与参数类型保持一致
    public <T> List<T> transferToList(T[] array){
        List<T> list = new ArrayList();
        for(T item : array){
            list.add(item);
        }
        return list;
    }

    //键值对泛型方法转化数组为Map
    public <K,V> Map<K,V> transferToMap(K[] key,V[] value){
        //长度必须相等,键值对是一一对应的映射关系
        if (key.length != value.length) return null;
        Map<K, V> map = new HashMap<>();
        for (int i = 0; i< key.length;i++ ){
            map.put(key[i],value[i]);
        }
        return map;
    }

    public static void main(String[] args) {
        PtMethod ptMethod = new PtMethod();
        String[] array = new String[]{"A", "B", "C", "D", "E"};
        List<String> list = ptMethod.transferToList(array);
        System.out.println(list);

        //测试值
        String[] array1 = new String[]{"asd", "dsa", "Cqwe", "azx", "asdqe"};
        String[] array2 = new String[]{"A", "B", "C", "D", "E"};

        //接收泛型方法返回值
        Map<String,String> map = ptMethod.transferToMap(array1, array2);
        //输出
        System.out.println(map);

    }
}

(谢谢)

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,同学的代码逻辑是没有问题的。

不过可以再优化一下:

对于transferToMap方法来说,第一个数组固定是作为key的,那么并不需要要求两个数组的长度必须相同。也可以是第一个数组的长度大于第二个数组,因为value是可以为null的。

另外,如果第一个数组的长度小于第二个数组,可以将第一个数组作为key,第二个数组超出长度的数据进行舍弃,而不是单纯的返回null,可能会更好一些。

祝学习愉快~

  • 只能卷了 提问者 #1
    public <K,V> Map<K,V> transferToMap(K[] key,V[] value){
        Map<K, V> map = new HashMap<>();
        //指示器
        int aSwitch = 0;
        //key比value长就是正,比value短就是负
        aSwitch = key.length - value.length;
        //那就把value作为基准,用加法aSwitch就是调节器。
        // key比value短就value直接舍弃掉短的部分不循环。key比value多,value就直接作为null值。
        for (int i = 0; i< value.length+aSwitch;i++ ){
            if(i < value.length)
                map.put(key[i],value[i]);
            else
                map.put(key[i],null);
        }
        return map;
    }

    然后用测试数据

    String[] array1 = new String[]{"asd", "dsa", "Cqwe", "azx", "asdqe"};
    String[] array2 = new String[]{"A", "B", "C", "D"};

    输出为

    https://img1.sycdn.imooc.com//climg/6378f54d091b58b304610056.jpg

    如果用测试数据

    String[] array1 = new String[]{"asd", "dsa", "Cqwe", "azx"};
    String[] array2 = new String[]{"A", "B", "C", "D","E"};

    输出为

    https://img1.sycdn.imooc.com//climg/6378f5ae092816c603770070.jpg

    如果用测试数据

    String[] array1 = new String[]{"asd", "dsa", "Cqwe", "azx","asdqe"};
    String[] array2 = new String[]{"A", "B", "C", "D","E"};

    输出为

    https://img1.sycdn.imooc.com//climg/6378f61d090f1aae04420061.jpg

    输出都符合预期。这样应该就是对的了吧。

    2022-11-19 23:28:35
  • 好帮手慕小尤 回复 提问者 只能卷了 #2

    同学你好,是的。

    祝学习愉快!

    2022-11-20 09:43:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师