arraylist和set相互转化的方法
Posted yanggb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arraylist和set相互转化的方法相关的知识,希望对你有一定的参考价值。
这里总结一下Array、List和Set相互转化的方法。
Array转化为List
将Array转化为List是使用Arrays.asList()方法。
String[] arr= new String[]{"yanggb1", "yanggb2", "yanggb3"}; List list = Arrays.asList(arr); list.add("yanggb4"); // not ok list.remove("yanggb2"); // not ok
要注意的是,Arrays.asList()方法的返回对象是一个Arrays内部类,并没有实现集合的修改方法。因此转化后的List并不能添加新元素或删除元素,会报错。
实际上,Arrays.asList()方法体现的是适配器模式,只是转换接口,而后台的数据仍是数组。这就意味着,如果对转换后的list中的元素进行修改,修改的结果会反映到原来的数组中,因为操作的实际上是原来的数组。
Array转Set
将Array转Set是使用Set集合的构造方法。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"}; Set<String> set = new HashSet<>(Arrays.asList(arr));
set.add("yanggb4"); // ok set.remove("yanggb2"); // ok
转换成Set集合之后可以添加元素或删除元素,因为是调用构造函数new出来的一个HashSet。
另外要注意的是,对转换后的Set集合进行的操作并不会影响到原来的Array。
System.out.println(set); // [yanggb3, yanggb1, yanggb4] System.out.println(arr[2]); // yanggb3
也可以看到,这种方式转换出来的Set相对原来的的数据来说是倒序的。
List转Set
将List转Set同样是使用Set集合的构造方法。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"}; List<String> list = Arrays.asList(arr); Set<String> set = new HashSet(list);
Set转List
将Set转List也可以使用List的构造方法。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"}; Set<String> set = new HashSet<>(Arrays.asList(arr)); List<String> list = new ArrayList<>(set);
List或Set转Array
List或Set转Array可以使用Collection.toArray()方法。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"}; List<String> list = Arrays.asList(arr); Set<String> set = new HashSet(list); String[] arr1 = list.toArray(new String[list.size()]); String[] arr2 = set.toArray(new String[set.size()]);
这里要注意的是,调用Collection.toArray(T[] t)方法的集合需要有指定其中元素的具体类型,否则会出现类型转换无效的情况(编译直接报错),这时候需要强行转化才可以。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"}; List list = Arrays.asList(arr); Set set = new HashSet(list); String[] arr1 = (String[])list.toArray(); String[] arr2 = (String[])set.toArray();
另外要注意的是,使用Collection.toArray()转换出来的数组是一个新的数组,不会影响到原来的数组。
"有些人明明看起来很友善,却总是独来独往。"
以上是关于arraylist和set相互转化的方法的主要内容,如果未能解决你的问题,请参考以下文章