`

array与list相关

阅读更多
1、将数组转化为一个列表
List<String> list = Arrays.asList(arr);  

Arrays.asList()会返回一个ArrayList对象,ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set()、get()、contains()方法,但是没有增加元素的方法,所以它的大小是固定的,想要创建一个真正的ArrayList类,你应该这样做:
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));  


测试程序如下:
        List<String> list = Arrays.asList("jzk","wyq");
        System.out.println(list.size());
        list.add("jdd");
        System.out.println(list.size());


控制台报错:
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:131)
	at java.util.AbstractList.add(AbstractList.java:91)


正确代码:
        List<String> list = new ArrayList<String>(Arrays.asList("jzk","wyq"));
        System.out.println(list.size());
        list.add("jdd");
        System.out.println(list.size());

控制台输出:
2
3


2、用Arrays的asList()生成的List时,获取List元素的个数
//经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1
char arrc = {'a','b'};
int  arrint = {1,2,4};
Arrays.asList(arrc).size() ;//  结果为1;
Arrays.asList(arrint ).size() ;//结果为1;
 
//传递对象数组,元素个数正确。
String arrstr = {"a","b","java","spring","hadoop","lucene"};
Arrays.asList(arrstr ).size() ;//结果为6;


public class TestArray {
	PrintStream out = System.out;
	@Test
	public void array() {
		char[] arrc = {'a','b','c','d','e'};
		out.println("传递char数组:");
		print(arrc);
		out.println("直接传递:");
		print('a','b','c','d','e');
		out.println("----------------------------");
		
		int[] arri = {1,2,3,4,5,6,7};
		out.println("传递int数组:");
		print(arri);
		out.println("直接传递:");
		print(1,2,3,4,5,6,7);
		out.println("----------------------------");
		
		Integer[] arrInt = {1,2,3,4,5,6,7};
		out.println("传递Integer数组:");
		print(arrInt);
		out.println("直接传递:");
		print(1,2,3,4,5,6,7);
		out.println("----------------------------");
		
		String[] arrs = {"a","b","c","d","e"};
		out.println("传递String数组:");
		print(arrs);
		out.println("直接传递:");
		print('a','b','c','d','e');
		out.println("----------------------------");
	}
	
	public void print(Object...arr){
		out.print("内容:"+Arrays.toString(arr));
		out.println("\t\t数组长度:"+arr.length+" ");
	}
}


输出结果
传递char数组:
内容:[[C@defa1a]		数组长度:1 
直接传递:
内容:[a, b, c, d, e]		数组长度:5 
----------------------------
传递int数组:
内容:[[I@f5da06]		数组长度:1 
直接传递:
内容:[1, 2, 3, 4, 5, 6, 7]		数组长度:7 
----------------------------
传递Integer数组:
内容:[1, 2, 3, 4, 5, 6, 7]		数组长度:7 
直接传递:
内容:[1, 2, 3, 4, 5, 6, 7]		数组长度:7 
----------------------------
传递String数组:
内容:[a, b, c, d, e]		数组长度:5 
直接传递:
内容:[a, b, c, d, e]		数组长度:5 
----------------------------



如果直接传递数组,基本类型数组将被视为一个对象而不会被解析成数组,如果直接传递参数将能正常解析。

下面的写法更加清晰
int[] intArray = {1,2,3}; 
List<int[]> myList = Arrays.asList(intArray); 
System.out.println(myList.size()); 
System.out.println(myList.get(0).length); 



================解释如下====================
/**
     * Returns a fixed-size list backed by the specified array.  (Changes to
     * the returned list "write through" to the array.)  This method acts
     * as bridge between array-based and collection-based APIs, in
     * combination with {@link Collection#toArray}.  The returned list is
     * serializable and implements {@link RandomAccess}.
     *
     * <p>This method also provides a convenient way to create a fixed-size
     * list initialized to contain several elements:
     * <pre>
     *     List&lt;String&gt; stooges = Arrays.asList("Larry", "Moe", "Curly");
     * </pre>
     *
     * @param a the array by which the list will be backed
     * @return a list view of the specified array
     */
    public static <T> List<T> asList(T... a) {
	return new ArrayList<T>(a);
    }

如果是基本类型数组,自动装箱将数组包装为对象如 int[] intArray = new int[] { 1, 2}; T... a 就是 [[1, 2]],可以看到 a 的 size 将为 1
如果是对象数组,不需要自动装箱如 Integer[] integerArray = new Integer[] { 1, 2}; T... a 就是 [1, 2],可以看到 a 的 size 将为 2

其实只要记住这句话就ok了:
基本类型的一位数组可以被当作Object类型使用(1.5),不能当做Object[]类型使用(1.4);非基本类型的一维数组,既可以当做Object类型使用(1.5)也可以当做Object[]类型使用(1.4)

3、把提供的数组元素放入一个字符串
// containing the provided list of elements
// Apache common lang
String j = StringUtils.join(new String[] { "a", "b", "c" }, ", ");
System.out.println(j);
// a, b, c
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics