1、数组到集合的方法:Arrays.asList()
返回的集合,不能进行增、删操作,否则会抛出异常:UnsportedOperationException,主要是通过集合提供的多种方法来操作数组
2、集合到数组:Collection的toArray(),传一个集合对象,长度小于集合的size,则系统自动会新声明一个集合,来增强for循环语句,采用for(类型 变量:对象)访问。
当从数组中 “移除” 项意味着要用新引用或 null 覆盖其索引槽,当从集合中移除项时,其 “后面” 的各项会上升填补空位。
实例讲解:
import java.util.*;
import java.io.*;
public class Practice {
public static void main(String[] args){
// TODO Auto-generated method stub
PrintStream out=System.out;
long time=System.nanoTime();
Integer[] array1={2,1,3,4,5};
int[] array2={2,1,3,4,5};
String [] str = {"abc", "def", "cf"};
int n=8;
Integer integer=new Integer(n);//integer和n是两个完全不同的类型(引用和数值),虽然值相同
List list0=Collections.EMPTY_LIST;//声明一个只读的空集合
Collection<Integer> c=new ArrayList<Integer>();
c.add(n+2);
c.add(integer);
List<Integer> list1=Arrays.asList(array1);//数组变集合
//list1.add(n);//错误,throw UnsupportedOperationException
//list1.add(integer);//错误,throw UnsupportedOperationException
List<int[]> list2=Arrays.asList(array2);
//List<int> lint=Arrays.asList(array2);//错误,集合中的是元素是对象,而int是基本类型,应该写为Integer;
List list3=Arrays.asList(array2);//基本数据类型的数组转为List,将整个数组作为一个元素存入List,所以输出的size为1;
List list4=Arrays.asList(str);
//list4.add("bfd");//错误,不能增加删除,因为数组的长度是固定的.抛出异常:UnsportedIOperationException
List<String> list5=Arrays.asList(str);
//list5.add("");//错误,不能增加删除,因为数组的长度是固定的.抛出异常:UnsportedIOperationException
String[] str1=list5.toArray(new String[list5.size()]);//集合变数组
out.println(integer);//结果为:8
out.println(c);//结果为:[10, 8]
out.println(list1);//结果为:[2, 1, 3, 4, 5]
out.println(list2);//结果为:[[I@12d96f2],不定,为什么是这样呢,因为asList()方法的参数必须是对象,应该把int[]转换为Integer[],对于其他primitive类型的数组也是如此,必须先转换为相应的wrapperz类型数组,具体看http://blog.youkuaiyun.com/kutekute/article/details/8024120
out.println(list3);//结果为:[[I@12d96f2],不定
out.println(list3.size());//结果为:1
out.println(list4);//结果为:[abc, def, cf]
out.println(list5);//结果为:[abc, def, cf]
for(String s:str1)
out.print(s+" ");//结果为:abc def cf
out.println(Arrays.toString(str1));//因为数值型数组是不能够整体输出的,需循环输出,而使用此方式可以整体输出
out.println(Arrays.asList(str));//或者作为集合也可以整体输出
out.println(Arrays.toString(str));//结果为:[abc, def, cf]
out.println("\n执行耗时 : "+(System.nanoTime()-time)+" 纳秒 ");//结果为:执行耗时 : 1707928 纳秒
//测试addAll()方法的效率
long a=System.nanoTime();
Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
out.println("\r执行耗时 : "+(System.nanoTime()-a)+" 纳秒 ");//结果为:执行耗时 : 32072 纳秒
a=System.nanoTime();
Collection<Integer> cc = new ArrayList<Integer>();
c.addAll(Arrays.asList(6,7,8,9,10));//addAll()写法1
out.println("\r执行耗时 : "+(System.nanoTime()-a)+" 纳秒 ");//结果为:执行耗时 : 20098 纳秒
a=System.nanoTime();
Collection<Integer> c2 = new ArrayList<Integer>();
Collections.addAll(c2, 11,12,13,14,15);//addAll()写法2
out.println("\r执行耗时 : "+(System.nanoTime()-a)+" 纳秒 ");//结果为:执行耗时 : 20098 纳秒
}
}