集合和数组之间的转换(面试题)

来源:互联网 发布:tonymoly的rd03是mac 编辑:程序博客网 时间:2024/04/28 02:37
1,面试题
package com.test;import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;import java.util.List;import java.util.Set;public class CollectionTest {public static void main(String[] args) {String[] array = {"c","b","d","a","b"};//List<String> list = Arrays.asList(array);List<String> list = new ArrayList<String>();Collections.addAll(list, array);list.add("e");System.out.println(list.toString());Set<String> set = new HashSet<>(list);set.add("f");System.out.println(set.toString());}}

代码如上,求输出结果

[c, b, d, a, b, e]
[f, d, e, b, c, a]

这个toString()是collection接口对toString的重写

这道题当时做错了,list.add("e")应该是添加到集合的末尾,set集合中的元素是按照hashcode来排序的。

2,这道题是我面试回来后自己写的例子,刚开始数组转list用了Arrays.asList(array),写的时候并没有报错,运行报Exception in thread "main" java.lang.UnsupportedOperationException,原因是

在使用Arrays.asList()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等,所以throw UnsupportedOperationException。

参考:http://blog.csdn.net/thunderous/article/details/3693362

当只对list进行查询的时候可以这么些,当进行添加删除操作时要用上面例子当中的方法。

3,各种list,set,map,array之间的转换

list转array

package com.test;import java.util.ArrayList;import java.util.List;public class ListIterator {public static void main(String[] args) {//将list转化为数组List<String> list = new ArrayList<>();list.add("a");list.add("b");String[] array = (String[]) list.toArray();System.out.println(array.toString());}}

运行报错:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
 at com.test.ListIterator.main(ListIterator.java:13)

原因是:不能将Object[] 转化为String[].转化的话只能是取出每一个元素再转化

Object[] objArray = list.toArray();String [] array = new String[list.size()];for(int i=0;i<objArray.length;i++){array[i]=objArray[i].toString();}


以上方法也适用于set,参考文章:http://www.cnblogs.com/ihou/archive/2012/05/10/2494578.html

4,list和set之间的转换:

package com.test;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;public class SetList {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("a");list.add("b");Set<String> set = new HashSet<String>(list);System.out.println(set.toString());List<String> list2 = new ArrayList<String>(set);System.out.println(list2.toString());}}



0 0