1、将数组转化为一个列表
Arrays.asList()会返回一个ArrayList对象,ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set()、get()、contains()方法,但是没有增加元素的方法,所以它的大小是固定的,想要创建一个真正的ArrayList类,你应该这样做:
测试程序如下:
控制台报错:
正确代码:
控制台输出:
2
3
2、用Arrays的asList()生成的List时,获取List元素的个数
输出结果
如果直接传递数组,基本类型数组将被视为一个对象而不会被解析成数组,如果直接传递参数将能正常解析。
下面的写法更加清晰
================解释如下====================
如果是基本类型数组,自动装箱将数组包装为对象如 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、把提供的数组元素放入一个字符串
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<String> 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