黑马程序员技术交流社区

标题: 关于Java集合中存放数据的问题 [打印本页]

作者: 王宝康    时间: 2012-7-15 13:16
标题: 关于Java集合中存放数据的问题
本帖最后由 王宝康 于 2012-7-16 11:50 编辑
  1. package collection;

  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Iterator;

  5. public class Test {

  6.         /**
  7.          * @param args
  8.          */
  9.         private int testInt;
  10.         private String testString;
  11.         public static void main(String[] args) {
  12.                 // TODO Auto-generated method stub
  13.                 Collection coll = new ArrayList();
  14.                 Test test1 = new Test();
  15.                 coll.add("abc1");
  16.                 coll.add("abc2");
  17.                 coll.add("abc3");
  18.                 coll.add(test1);
  19.                
  20.                 Iterator iterator = coll.iterator();
  21.                 while (iterator.hasNext()) {
  22.                         System.out.println(iterator.next()) ;               
  23.                 }
  24.         }
  25.         public int getTestInt() {
  26.                 return testInt;
  27.         }
  28.         public void setTestInt(int testInt) {
  29.                 this.testInt = testInt;
  30.         }
  31.         public String getTestString() {
  32.                 return testString;
  33.         }
  34.         public void setTestString(String testString) {
  35.                 this.testString = testString;
  36.         }
  37. }
复制代码
今天看到Java集合部分,讲到Java集合中不能存放基本类型的数据,而只能存放对象的引用,知道Java集合中存放的数据均为对象的引用,所以写了这样一段小程序,打印输出并没有出乎意料,test1对象为它在内存中的地址,可是这样存放对象好像意义不大,这时候想到了Collection的泛型属性,这里创建集合的时候指定Java集合中允许的对象的类型,就能保证集合中存放的对象的类型一致,因次在对集合中元素进行操作时,不会出现出乎意外的情况。我想问下我这么认为是对是错,欢迎大家指正。。。

11.JPG (12.62 KB, 下载次数: 74)

11.JPG

11.JPG (12.62 KB, 下载次数: 63)

运行截图

运行截图

作者: 苑占丽    时间: 2012-7-15 14:10

今天看到Java集合部分,讲到Java集合中不能存放基本类型的数据,而只能存放对象的引用,知道Java集合中存放的数据均为对象的引用,所以写了这样一段小程序,打印输出并没有出乎意料,test1对象为它在内存中的地址,可是这样存放对象好像意义不大,这时候想到了Collection的泛型属性,这里创建集合的时候指定Java集合中允许的对象的类型,就能保证集合中存放的对象的类型一致,//不是保证对象的类型一致,集合可以存放不同类型的对象,这一点区别于数组,数组里数据的数据类型要一致。
数组虽然也可以存放对象,但长度是固定的,集合长度是可变的。数组中还可以存储基本数据类型,集合只能存放对象
因次在对集合中元素进行操作时,不会出现出乎意外的情况。我想问下我这么认为是对是错,欢迎大家指正。。。



作者: 苑占丽    时间: 2012-7-15 15:23
苑占丽 发表于 2012-7-15 14:10
今天看到Java集合部分,讲到Java集合中不能存放基本类型的数据,而只能存放对象的引用,知道Java集合中存 ...

实际应用中我就不太清楚了,我只知道集合里存放的是对象,且不要求类型一致,是对象即可。
作者: 张_涛    时间: 2012-7-15 16:38
集合中存放的是Object对象,使用泛型可以指定存放数据的类型,你的理解是正确的。
之所以有了泛型,主要因为泛型的作用:
1.如果不用泛型,则必须使用强制类型转换,而强制类型转换是不安全,在运行期可能发生ClassCastException异常,如果使用泛型,则会在编译期就能发现该错误
2.使用泛型可以避免代码里出现大量的类型转换 ,从Object类型转换到实际的类型
作者: 黑马刘涛    时间: 2012-7-15 17:14
Collection的泛型属性,这里创建集合的时候指定Java集合中允许的对象的类型,就能保证集合中存放的对象的类型一致,因次在对集合中元素进行操作时,不会出现出乎意外的情况。我认为你理解的是正确的。指定类型后就不能存进去了,贴代码:
  1. package collection;

  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Iterator;

  5. public class Test2 {

  6.         /**
  7.          * @param args
  8.          */
  9.         private int testInt;
  10.         private String testString;
  11.         public static void main(String[] args) {
  12.                 // TODO Auto-generated method stub
  13.                 Collection<String> coll = new ArrayList<String>();// 指定向集合中存放元素的类型
  14.                 Test2 test = new Test2();
  15.                 coll.add("abc1");
  16.                 coll.add("abc2");
  17.                 coll.add("abc3");
  18.                 coll.add(test);
  19.                
  20.                 Iterator<String> iterator = coll.iterator();
  21.                 while (iterator.hasNext()) {
  22.                         System.out.println(iterator.next()) ;               
  23.                 }
  24.         }
  25.         public int getTestInt() {
  26.                 return testInt;
  27.         }
  28.         public void setTestInt(int testInt) {
  29.                 this.testInt = testInt;
  30.         }
  31.         public String getTestString() {
  32.                 return testString;
  33.         }
  34.         public void setTestString(String testString) {
  35.                 this.testString = testString;
  36.         }
  37. }
复制代码

捕获.PNG (24.1 KB, 下载次数: 65)

捕获.PNG

作者: 刘笑    时间: 2012-7-15 17:22
楼主到后面就知道了,集合中对象类型不必一致,集合可以存放多种类型的对象。
泛型就是一个例子:List<Integer> list = new ArrayList<Integer>();    List<String> list = new ArrayList<String>();
在List集合中可以存放Integer,也可以存放String类型的对象······至于泛型的概念和作用,楼上已经说得很清楚了。楼主加油!


作者: 王宝康    时间: 2012-7-16 11:41
刘笑 发表于 2012-7-15 17:22
楼主到后面就知道了,集合中对象类型不必一致,集合可以存放多种类型的对象。
泛型就是一个例子:List list ...

嗯嗯,谢谢,加油,Up Up Up!




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