A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

昨晚喝酒喝晕了,今天早上脑子不清醒,求解释。。。。。。。。。。。。。
package Demo.collection;
import java.util.*;
public class Demo1 {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
//int[] arr = {2,3,4};
  //System.out.println(arr[1]);
  //List list=Arrays.asList(arr);
  //list.add(6);//不可以增删,因为数组长度有限
  ArrayList list=new ArrayList();
  list.add(2);
  list.add(3);
  list.add(4);
  
  System.out.println(list.contains(2));
  System.out.println(list.indexOf(2));
  System.out.println(list.size());
}
}
自己定义的集合运行结果:
true
0
3
用数组转过来的集合运行结果:
false
-1
1

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 呵呵,适量饮酒啊!

查看全部评分

9 个回复

倒序浏览
本帖最后由 唐辉辉 于 2012-6-5 09:46 编辑

朋友  是你的Arrays.asList(arr); 运用错误, 这里传进去的是一个数组,它会把整个数组当做一个对象传入,而不是单个的值。所以后面的结果才会出现问题。
如果你把它 改成Arrays.asList(2,3,4); 则不是产生错误。

public static void main(String[] args) {
   // TODO Auto-generated method stub
int[] arr = {2,3,4};
   //System.out.println(arr[1]);
   List list=Arrays.asList(2,3,4);
   //list.add(6);//不可以增删,因为数组长度有限
   //ArrayList list=new ArrayList();
   //list.add(2);
  // list.add(3);
   //list.add(4);
   
  System.out.println(list.contains(2));
  System.out.println(list.indexOf(2));
  System.out.println(list.size());
}
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
不用基本数据类型也不会出错啊。为什么indexOf(2)是0啊?

Object[] arr = {2,3,4};
java.util.List list = Arrays.asList(arr);

System.out.println(list.contains(2));
System.out.println(list.indexOf(2));
System.out.println(list.size());
输出
true
0
3
回复 使用道具 举报
唐辉辉 发表于 2012-6-5 09:44
朋友  是你的Arrays.asList(arr); 运用错误, 这里传进去的是一个数组,它会把整个数组当做一个对象传入, ...

哦,这样啊,谢谢!
// TODO Auto-generated method stub
                int[] arr = {2,3,4};
                //System.out.println(arr[1]);
                List list=Arrays.asList(2,3,4,5,7);
        System.out.println(list.contains(2));
                System.out.println(list.indexOf(7));
                System.out.println(list.size());

这样的结果也能运行:那数组转集合失去意义了吧,数组里面不是什么值都无所谓。。。。
回复 使用道具 举报
因为int[] 是基本数据类型,所以在List list=Arrays.asList(arr);中,asList把int[]只当做一个元素,代码修改方法:把int[] arr = {2,3,4};变成Integer[] arr = {2,3,4};
回复 使用道具 举报
15574016362 发表于 2012-6-5 09:51
不用基本数据类型也不会出错啊。为什么indexOf(2)是0啊?

Object[] arr = {2,3,4};

看楼上的答案,说的有道理。。。。。。。。。。。
回复 使用道具 举报
黑马11期李项京 发表于 2012-6-5 09:56
因为int[] 是基本数据类型,所以在List list=Arrays.asList(arr);中,asList把int[]只当做一个元素,代码修 ...

高手,一语击破,Integer[] arr = {2,3,4};
                //System.out.println(arr[1]);
                List list=Arrays.asList(arr);
我试了 谢了
直接把它变成对象,传过去。。。。。。。。。。。。。:victory::):victory:
回复 使用道具 举报
错误在于int[] 是基本数据类型的数组,
而在List中包含的必须是对象~{:soso_e154:}
因而需要把int[]基本数据类型的数组封装为Integer[]数组对象:Integer[] arr = {2, 3, 4};

这样就可以啦~{:soso_e121:}同理,其他的基本数据类型在这种需要转变为对象的情况下都有封装方法:
double----Double
long----Long
boolean----Boolean
等等

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
错误在于int[] 是基本数据类型的数组,
而在List中包含的必须是对象~{:soso_e154:}
因而需要把int[]基本数据类型的数组封装为Integer[]数组对象:Integer[] arr = {2, 3, 4};

这样就可以啦~{:soso_e121:}同理,其他的基本数据类型在这种需要转变为对象的情况下都有封装方法:
double----Double
long----Long
boolean----Boolean
等等
回复 使用道具 举报
一句话,基本数据类型数组转成集合后,被当做一个Object对象存进去了,剩下的问题你就应该都知道了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马