美文网首页Kotlin
List、Set、Map、数组互转(Java和Kotlin对比)

List、Set、Map、数组互转(Java和Kotlin对比)

作者: Mew888 | 来源:发表于2022-12-08 10:03 被阅读0次

有时候Java(针对JDK8)和Kotlin混合开发,相互调用过程中,经常有一些集合和数组的互转,使用不当或不清楚会出现调用类型不匹配问题或其它报错,本篇整理一下。国际规则,直接上测试代码,仅供参考

List、Set、Map、数组互转(Java版本)

/**
 * List 转为 String 数组
 */
private static void listToStringArr() {
    List<String> list=new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    // 方法1:
    String[] str = list.toArray(new String[list.size()]);
    // 方法2:
    String[] str2 = new String[list.size()];
    for(int i=0;i<list.size();i++) {
        str2[i] = list.get(i);
    }
}

/**
 * String 数组 转为List
 */
private static void stringArrToList() {
    String[] strs = {"a","b","c"};
    // 方法1:
    List<String> list = Arrays.asList(strs);
    //list这个集合是不可修改的,还需要进一步转换
    List<String> list2 = new ArrayList<>(list);
    // 方法2:
    List<String> list3 = new ArrayList<>();
    Collections.addAll(list3, strs); //内部循环赋值
}


/**
 * list转set
 */
private static void listToSet() {
    List<String> list=new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    Set<String> set = new HashSet(list);

}

/**
 * set转list
 */
private static void setToList() {
    Set<String> set = new HashSet();
    set.add("a");
    set.add("b");
    set.add("c");
    List<String> list=new ArrayList<>(set);
}



/**
 * map转set
 */
private static void mapToSet() {
    Map<String,Integer> map = new HashMap();
    map.put("a", 1);
    map.put("b", 2);
    map.put("c", 3);

    Set<String> keySet = new HashSet(map.keySet());
    //value同理

}

/**
 * map转list
 */
private static void mapToList() {
    Map<String,Integer> map = new HashMap();
    map.put("a", 1);
    map.put("b", 2);
    map.put("c", 3);

    List<String> keyList = new ArrayList(map.keySet());
    //value同理
}

List、Set、Map、数组互转(Kotlin版本,含可变和不可变集合转换)

    /**
     * List 转为 String 数组
     */
    fun listToStringArr() {
        val list: MutableList<String> = ArrayList()
        list.add("a")
        list.add("b")
        list.add("c")
        // 方法1:
        val str = list.toTypedArray()

        // 方法2:
        val str2 = arrayOfNulls<String>(list.size)
        for (i in list.indices) {
            str2[i] = list[i]
        }
    }

  /**
     * String 数组 转为List
     */
    fun stringArrToList() {
        val strs = arrayOf("a", "b", "c")

        //转为不可变集合
        val list1= Arrays.asList(strs) 
        // or
        val list2 = strs.asList()
        //or
        val list3 = listOf(strs)


        //转为转为可变集合

        val mutableList: MutableList<String> = strs.toMutableList()


    }



    /**
     * list转set
     */
    fun listToSet() {
        val list: MutableList<String> = ArrayList()
        list.add("a")
        list.add("b")
        list.add("c")
        //转为不可变集合
        val set1: Set<String> = HashSet<String>(list)
        //or
        val set2 = setOf(list)

        //转为可变集合
        val mutableSet= HashSet(list)
        //or
        val mutableSet1= mutableSetOf(list)
        //or
        val mutableSet2= hashSetOf(list)


    }

    /**
     * set转list
     */
    fun setToList() {
        val set: MutableSet<String> = HashSet<String>()
        set.add("a")
        set.add("b")
        set.add("c")
        //转为不可变集合
        val list1: List<String> = ArrayList<String>(set)
        //or
        val list2 = listOf(set)

        //转为可变集合
        val mutableList =ArrayList(set)
        //or
        val mutableList1 =mutableListOf(set)
        //or
        val mutableList2 = arrayListOf(set)
    }




    /**
     * map转set
     */
    fun mapToSet() {
//        val map: MutableMap<String, Int> = HashMap()
        //or
//        val map: MutableMap<String, Int> = hashMapOf()
        //or
        val map= hashMapOf<String, Int>() //mutableMapOf对应LinkedHashMap
        map["a"] = 1
        map["b"] = 2
        map["c"] = 3
        //转为不可变集合
        val keySet1: Set<String> = HashSet<String>(map.keys)
        //or
        val keySet2= setOf(map.keys)


        //转为可变集合
        val keyMutableSet= HashSet(map.keys) //对应HashSet
        //or
        val keyMutableSet1= mutableSetOf(map.keys) //对应LinkedHashSet
        //or
        val keyMutableSet2= hashSetOf(map.keys) //对应HashSet


    }

    /**
     * map转list
     */
    fun mapToList() {
        val map= hashMapOf<String, Int>()
        map["a"] = 1
        map["b"] = 2
        map["c"] = 3
        //转为不可变集合
        val keyList1: List<String> = ArrayList<String>(map.keys)
        //or
        val keyList2 = listOf(map.keys)

        //转为可变集合
        //or
        val keyMutableList = ArrayList(map.keys)
        //or
        val keyMutableList1 =mutableListOf(map.keys)
        //or
        val keyMutableList2 = arrayListOf(map.keys)

    }

根据上面可知,在Kotlin中调用Java方法传参,必须使用Kotlin可变集合对应Java的可变集合,Java不可变集合是JDK9 以上版本的新特征,道理是一样的。

相关文章

  • java开发工程常用的数据结构(集合)

    List Map Set list,set,map对比 总结: Vector和ArrayList vector是线...

  • 四、Kotlin集合

    "集合:List、Set、Map" 集合:List、Set、Map 与大多数语言不同,Kotlin 区分可变集合和...

  • (二)15.map-set与数组对象的比较19-08-12

    map和数组的对比 打印结果: set和数组的对比 map set Object对比 打印结果:map-set-o...

  • Kotlin 集合

    与 Java 不同, Kotlin 明确地区分可变的和不可变的集合(list, set, map, 等等)。可变的...

  • Map接口

    Java常用集合为List,Set和Map,其中List和Set都实现了Collection接口,而Map并没有 ...

  • Kotlin---集合与遍历

    介绍 同样在Kotlin中会有List、Map、Set,而与Java中数据结构大多相同,也略有区别。Kotlin中...

  • Android Review

    java相关 java基础面试题 四种引用对比 List,Set,Map 详解 反射 JNI JNI 各版本特性 ...

  • 集合

    java集合接口有List,Set,Map。 List和Set都实现了Collection(对集合排序,遍历)接口...

  • Android面试Java基础篇(一)

    问:Java集合类List,Map,Set相关的实现原理。 答:List和Set都是Collection的子类 ...

  • Android面试复习笔记 6

    11.Java基础 1. 集合 List,Set,Queue和Map。List,Set,Queue都是接口,他们都...

网友评论

    本文标题:List、Set、Map、数组互转(Java和Kotlin对比)

    本文链接:https://www.haomeiwen.com/subject/gbanfdtx.html