黑马程序员技术交流社区

标题: 9行代码体现集合框架中的一个小细节[分享] [打印本页]

作者: 张少威    时间: 2012-6-3 13:58
标题: 9行代码体现集合框架中的一个小细节[分享]
1 String[] strs = {"string--01", "string--02", "string--03", "string--04"};
2 List<String> strsList = Arrays.asList(strs);
3 //以下语句输出:[string--01, string--02, string--03, string--04]  
4 System.out.println(strsList);
5
6 int[] ints = {2, 3, 4, 5};
7 List<int[]> intsList = Arrays.asList(ints);
8 //以下语句输出:[[I@c17164]  
9 System.out.println(intsList);
10
11 Integer[] intes = {2, 3, 4, 5};
12 List<Integer> intesList = Arrays.asList(intes);
13 //以下语句输出:[2, 3, 4, 5]  
14 System.out.println(intesList);

结论:

当使用Arrays工具类的asList方法将一个数组转换为列表时,若数组中的元素是引用类型,则数组中的元素就做为列表的元素;如果数组中的元素是基本类型,则数组做为列表的元素。

一句话:集合中只存放对象。

作者: 张頔    时间: 2012-6-3 22:13
求教
我运行了一下你的例子
int[] ints = {2, 3, 4, 5};
List<int[]> intsList = Arrays.asList(ints);  // 在list出提示错误  怎么回事 该导的包都导了
                                      //改成 List intesList = (List)Arrays.asList(intes);后不提示错误但是 明显不对啊  
8//以下语句输出:[[I@c17164]  
9System.out.println(intsList);

作者: 张少威    时间: 2012-6-3 22:42
张頔 发表于 2012-6-3 22:13
求教
我运行了一下你的例子
int[] ints = {2, 3, 4, 5};

包是不是导错啦?
应该导入的是java.util.List
作者: 张少威    时间: 2012-6-3 22:42
张頔 发表于 2012-6-3 22:13
求教
我运行了一下你的例子
int[] ints = {2, 3, 4, 5};

包是不是导错啦?
应该导入的是java.util.List
作者: 张頔    时间: 2012-6-3 22:48
import java.awt.List;
import java.util.*;//呵呵 所有有关的都导了

public class Inc  
{
      public static void main(String args[])
      {
              Integer[] intes = {2, 3, 4, 5};
               List intesList = (List)Arrays.asList(intes);
               //以下语句输出:[2, 3, 4, 5]  
               System.out.println(intesList);
      }
}
//没有提示错误  但是运行结果
Exception in thread "main" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.awt.List
        at Inc.main(Inc.java:8)
作者: 杜俊彪    时间: 2012-6-3 23:52
我觉得,首先,你既然想说明集合中只能存放对象,你就不应该用泛型,   如果你都指定泛型了,那肯定是你指定的泛型对象了;   不管是集合Set还是集合List都有一个add(Object obj) 方法,当你 传递的是一个引用时,   相应的集合就会指向引用所指的数据;   就上面的int[] ints = {2, 3, 4, 5} 当你用List<int[]> intsList = Arrays.asList(ints); 此时,  集合intsList就会开辟内存来存放数组ints[]的地址,就此也就指向了数组;
作者: 小小    时间: 2012-6-4 09:33
张頔 发表于 2012-6-3 22:48
import java.awt.List;
import java.util.*;//呵呵 所有有关的都导了

import java.awt.List;
把上面这个删除
作者: 张少威    时间: 2012-6-4 09:38
Exception in thread "main" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.awt.List
        at Inc.main(Inc.java:8)
java.awt.List
你使用的是java.awt包的List,应该使用java.util包的List

作者: 张頔    时间: 2012-6-4 17:29
{:soso_e127:}  我晕




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