Arrays.asList()方法使用

来源:互联网 发布:软件公司员工保密协议 编辑:程序博客网 时间:2024/05/18 14:24

  Arrays.asList方法,可以将一个数组转换成List对象。

  看下面的例子。

 

package ex2;import java.util.Arrays;import java.util.List;public class ToList {public static void main(String[] args) {testInt();testString();testObject();}/* * Arrays.asList对于基本数据类型是不支持,即使转换了,也会出现一些奇怪的问题 * 比如下面的int[]转换就失败了 * 而String[]转换后却符合我们的预期 */private static void testInt() {System.out.println("下面开始测试整数的情况");int[] num = new int[5];for(int i=0;i<num.length;i++) {num[i]=i*5;}List<int[]> list = Arrays.asList(num);//此处写成List<int>是不行的,IDE提示必须修改成int[],也就是说转换是失败的System.out.println(list);int j=0;for(int[] x:list) {System.out.println("下面是list.get("+j+")的内容");for(int i=0;i<x.length;i++) {System.out.println(x[i]);}j++;}}private static void testString() {System.out.println("下面开始测试String");String[] str = new String[5];str[0]="zn";str[1]="uk";str[2]="skk";str[3]="sfd";str[4]="china";List<String> list = Arrays.asList(str);//IDE没有报错,表示转换是成功的System.out.println(list);for(String s:list) {System.out.println(s);}//updatelist.set(2, "update");System.out.println("update list index 2:"+list.get(2));//update--cross originalstr[1]="update??";System.out.println("update str[1]:"+list.get(1));//上面两个转换都成功了,表明前面的转换并不是简单的赋值,而是有着引用关系的。当前面的String数组发生变化时, 后面的List也会跟着改变}private static void testObject() {System.out.println("下面开始测试Object user");User[] ur = new User[3];User u1 = new User(1,"zfg");User u2 = new User(2,"sghj");User u3 = new User(3,"ksfl");ur[0]=u1;ur[1]=u2;ur[2]=u3;List<User> list = Arrays.asList(ur);System.out.println(list);for(User user:list) {System.out.println(user+"--id:"+user.getId()+",name:"+user.getName());}//update---cross original user objectu2.setName("Update");System.out.println("u2 has not been updated!");for(User user:list) {System.out.println(user+"--id:"+user.getId()+",name:"+user.getName());}//update---cross the arrayur[1].setName("Update");System.out.println("u2 has been updated!");for(User user:list) {System.out.println(user+"--id:"+user.getId()+",name:"+user.getName());}//update---cross the listlist.get(2).setName("Update??");System.out.println("u3 has been updated!");for(User user:list) {System.out.println(user+"--id:"+user.getId()+",name:"+user.getName());}}}

运行结果如下:

下面开始测试整数的情况[[I@15db9742]下面是list.get(0)的内容05101520下面开始测试String[zn, uk, skk, sfd, china]znukskksfdchinaupdate list index 2:updateupdate str[1]:update??下面开始测试Object user[ex2.User@6d06d69c, ex2.User@7852e922, ex2.User@4e25154f]ex2.User@6d06d69c--id:1,name:zfgex2.User@7852e922--id:2,name:sghjex2.User@4e25154f--id:3,name:ksflu2 has not been updated!ex2.User@6d06d69c--id:1,name:zfgex2.User@7852e922--id:2,name:Updateex2.User@4e25154f--id:3,name:ksflu2 has been updated!ex2.User@6d06d69c--id:1,name:zfgex2.User@7852e922--id:2,name:Updateex2.User@4e25154f--id:3,name:ksflu3 has been updated!ex2.User@6d06d69c--id:1,name:zfgex2.User@7852e922--id:2,name:Updateex2.User@4e25154f--id:3,name:Update??

我们发现,Arrays.asList其实并不是简单地把数组转换成了List,而是让List引用了前面的数组。两者中有一个发生变化(比如简单的修改),那么另一个也会同样发生变化。

此外,这个方法对于基本数据类型的支持是不好的。

它主要是为对象服务的,也就是Object。

当然,上面的例子已经说明String数组还是使用它的。

PS:可以参照一下这篇:http://blog.csdn.net/cntanghai/article/details/7188296