因为我一直都只是知道Array.asList这个方法的存在而没有使用过,今天用到的时候遇到了一堆问题,于是就想着记录一下。
Array.asList
一、使用方法
1.创建一个String数组,如果是其他类型(int、double等)要使用包装类,普通类使用asList生成出的List里面会是一个一个数组。
2.调用Array.asList方法生成List。
String[] animal = {"Tom", "Jerry", "Lightning", "Butch", "Topsy"};
List<String> strings = Arrays.asList(animal);
二、注意事项
调用asList生成出来的List会随着原数组的变化而改变,如下所示:
//animal = {"Tom", "Jerry", "Lightning", "Butch", "Topsy"}
System.out.println(strings.get(0));
animal[0] = "Muscles"; // Jerry的大表哥
System.out.println(strings.get(0));
// 输出:
//Tom
//Muscles
关于原因的话就是调用asList会new出来一个新的ArrayList,但是ArrayList中存放的还是原本数组中的那些字符串对象,可以用下面的代码证明:
System.out.println(animal[0].hashCode());
System.out.println(strings.get(0).hashCode());
// 输出:
// -1217788670
// -1217788670
toArray
一、使用方法
toArray有两种使用方法,第一种是无参使用:
Object[] objectArray = strings.toArray();
第二种是有参使用:
String[] stringArray = strings.toArray(new String[0]);
其中new String[]中的参数代表你创建的String数组的长度,如果List中的数据不能填满这个数组剩余的空间会全部设置为null。
二、注意事项
与asList不同,toArray中生成的数组是新new出来的,因此就算List中的数据就算发生改变也不会影响到数组了(因为使用new算生成新的对象了,asList中是指向同一个地址,new的话算是两个对象内容一样但是地址不同)。