标题:List类存放数组类型的问题!
只看楼主
batwyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-4-16
 问题点数:0 回复次数:9 
List类存放数组类型的问题!
import java.util.*;
public class Test
{
public static void main(String[] args)
{
String [] a={"5","2","3","4"};
System.out.println("The length of String[] a is "+a.length);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}

List<String> lst=Arrays.asList(a);
for(int i=0;i<lst.size();i++){
System.out.println(lst.get(i));
}
}
}


上述程序编译和运行都没有问题,功能是将string数组中各个string作为单个项放入List并访问;
但是,如果我想把string数组作为一个整体,作为一项放入List,即List每项都是string数组,而不是单个string,那么我是不是应该把程序改为:
......
List<String []> lst=Arrays.asList(a);
......

这时编译报错,说是找到的a是个string,但泛型要求是string [],奇怪!我的a明明定义为一个string[],怎么会是个string?

更奇怪的是,如果我定义int [] a={1,2,3,4},List创建时写:List<int []> lst=Arrays.asList(a)就完全没问题。程序如下:
import java.util.*;
public class Test
{
public static void main(String[] args)
{
int [] a={1,2,3,4,5};
System.out.println("The length of String[] a is "+a.length);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}

List<int []> lst=Arrays.asList(a);
for(int i=0;i<lst.get(0).length;i++){
System.out.println(lst.get(0)[i]);
}
}
}

这是怎么回事?

[此贴子已经被作者于2007-10-11 13:03:17编辑过]

搜索更多相关主题的帖子: List lst 类型 String public 
2007-10-11 13:01
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
你这样做是没有意义的,整个东西放到数组里面list.add()不就可以了,干嘛还要Arrays.asList,

asList是要剥掉一层数组的,除非你是二维数组,

可惜不是你,陪我到最后
2007-10-11 13:09
batwyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-4-16
得分:0 
回复:(千里冰封)你这样做是没有意义的,整个东西放...
呵呵,版主提醒的是。不过我只是在学习List的用法,而不是要实现个什么功能,所以,请您解答下我的问题吧,就是剥掉一层,为什么int []的可以,string []的不可以?
谢谢啦

[此贴子已经被作者于2007-10-11 13:30:54编辑过]


2007-10-11 13:13
batwyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-4-16
得分:0 
麻烦各位达人帮忙,急!

[此贴子已经被作者于2007-10-11 13:34:57编辑过]



2007-10-11 13:34
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
因为int是一个基本的数据类型,所以当你把a传进去的时候,它会认为你是传一个对象进去,而不会认为你传了一个数组进去
,所以它会把你的整个数组当做一个对象传进去,所以你传int[]的时候会通过,而这其实并不是我们大多数人想要的

不信,你可以把int[]改为Integer[]试一下,一样过不了,asList这个方法的目的就是把你的参数分开,构成一个List。如果你硬要把数组装进去,你可以用二维数组,那么剥掉一层以后,就剩下一维的数组了

Integer[][] ii=new Integer[5][5];
List<Integer[]> list=Arrays.asList(ii);

不过,我不是相信,这并不是设计Arrays.asList这个方法的人想希望看到的

可惜不是你,陪我到最后
2007-10-11 13:35
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
更正,以上最后一句应该是:

不过,我还是相信,这并不是设计Arrays.asList这个方法的人想希望看到的

可惜不是你,陪我到最后
2007-10-11 13:36
缘吇弹
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:43
帖 子:3038
专家分:27
注 册:2007-7-2
得分:0 

果然是灌水之王


Repeat  Life=Study;Until (death);
2007-10-11 13:37
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
我是在说正事

可惜不是你,陪我到最后
2007-10-11 13:38
缘吇弹
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:43
帖 子:3038
专家分:27
注 册:2007-7-2
得分:0 

知道啦.
PS:以后俺也忘记"编辑"的操作啦.


Repeat  Life=Study;Until (death);
2007-10-11 13:40
batwyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-4-16
得分:0 
回复:(千里冰封)因为int是一个基本的数据类型,所以...

解答很具体,我明白了,太感谢了!


2007-10-11 13:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-176701-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.274466 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved