Java中数组与集合的转换

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.csdn.net/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 纳秒 

		
	}

}


0
0

你可能感兴趣的:(java,list,String,Integer,Class,import)