黑马程序员技术交流社区

标题: 关于数组转成集合的小问题 [打印本页]

作者: 为梦而战    时间: 2011-12-22 15:46
标题: 关于数组转成集合的小问题
本帖最后由 为梦而战 于 2011-12-22 20:03 编辑

String[] str转成集合后为什么能直接输出,int [] in转成集合后为什么就不能直接输出啊?

作者: 刘基军    时间: 2011-12-22 15:58
使用什么方法转呢
作者: 为梦而战    时间: 2011-12-22 16:00
使用工具类Arrays中的asList()方法


作者: 袁泽宇    时间: 2011-12-22 16:03
int[] i = {1,2,3,4,5};
                TreeSet<Integer> ts=new TreeSet<Integer>();
                for (int j : i) {
                        ts.add(j);
                }
                System.out.println(ts);
               
运行结果:[1, 2, 3, 4, 5]

可以直接输出
作者: t_mac    时间: 2011-12-22 16:05
为了能版本兼容 因为java1.5之前 asList(Object[] obj) 接收的是Object[] 而当你传一个
String[]  编译器一看String是Object 这是一个Object[] 用的是1.5之前的方法 即把String[]中元素放入List集合中
而当你传人int[] 时  编译器一看int不是Object 这不是一个Object[]  不能用1.4之前的 方法
1.5版本后 出现 asList(T... a) 它会把int[] 作为一个Object 而不会去取出其中每个元素 所以你看不到想要的输出效果
作者: 黄达标    时间: 2011-12-22 16:09
String[] str转成集合,数组中元素直接转成集合中的元素,相当于打印一个ArrayList<String>的集合。
int [] in转成集合,只是in这个数组成为了集合中的元素,打印出来的就是in的地制值。
作者: 为梦而战    时间: 2011-12-22 16:40
t_mac 发表于 2011-12-22 16:05
为了能版本兼容 因为java1.5之前 asList(Object[] obj) 接收的是Object[] 而当你传一个
String[]  编译器一 ...

既然有这个数组引用转成集合的方法,应该是只要我指定的任何类型数组应该都能转成集合,然后用集合的思想去操作数组才好啊,那这里出现的不一致性用什么方法能解决呢?
作者: 为梦而战    时间: 2011-12-22 16:43
黄达标 发表于 2011-12-22 16:09
String[] str转成集合,数组中元素直接转成集合中的元素,相当于打印一个ArrayList的集合。
int [] in转成 ...

为什么int[] in数组转成集合的时候它的元素就不作为集合元素啊?是因为int[] in数组中的元素是基本类型而不是对象,而集合中存放的都是对象的原因吗?基本数据类型不是能自动装箱成对象吗?有点不明白,望指点!
作者: 为梦而战    时间: 2011-12-22 16:48
袁泽宇 发表于 2011-12-22 16:03
int[] i = {1,2,3,4,5};
                TreeSet ts=new TreeSet();
                for (int j : i) {

这个到是也行,但是专为int[] 这样的数组写就的自己写一个方法将其转成集合,那数组的类型很多对吧,要是将其它类似于Int[] 的数组要是也要转成集合来使用的话,又怎么办?
作者: t_mac    时间: 2011-12-22 16:53
为梦而战 发表于 2011-12-22 16:40
既然有这个数组引用转成集合的方法,应该是只要我指定的任何类型数组应该都能转成集合,然后用集合的思想 ...

像这样基本类型的数组不能直接转,只能间接转
作者: t_mac    时间: 2011-12-22 16:55
为梦而战 发表于 2011-12-22 16:48
这个到是也行,但是专为int[] 这样的数组写就的自己写一个方法将其转成集合,那数组的类型很多对吧,要是 ...

可以封装成一个方法,
用反射可以实现  Class 类有个isArray方法 很好用的
作者: 为梦而战    时间: 2011-12-22 17:02
t_mac 发表于 2011-12-22 16:55
可以封装成一个方法,
用反射可以实现  Class 类有个isArray方法 很好用的

是不,我还没有学到那了,谢谢你的指点,等我学了那部分后,用一用!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2