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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王宝康 中级黑马   /  2012-7-15 13:16  /  2984 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王宝康 于 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, 下载次数: 36)

11.JPG

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

运行截图

运行截图

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览

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


点评

我觉得呗,要是集合中保存的对象的类型不同的话,实际应用中意义不是很大。  发表于 2012-7-15 15:05
回复 使用道具 举报
苑占丽 发表于 2012-7-15 14:10
今天看到Java集合部分,讲到Java集合中不能存放基本类型的数据,而只能存放对象的引用,知道Java集合中存 ...

实际应用中我就不太清楚了,我只知道集合里存放的是对象,且不要求类型一致,是对象即可。

点评

谢谢你,呵呵...  发表于 2012-7-15 15:36
回复 使用道具 举报
集合中存放的是Object对象,使用泛型可以指定存放数据的类型,你的理解是正确的。
之所以有了泛型,主要因为泛型的作用:
1.如果不用泛型,则必须使用强制类型转换,而强制类型转换是不安全,在运行期可能发生ClassCastException异常,如果使用泛型,则会在编译期就能发现该错误
2.使用泛型可以避免代码里出现大量的类型转换 ,从Object类型转换到实际的类型

点评

这样啊,我在看集合这一部分,还没有看到泛型呢,之前看过一点儿,觉得泛型可能就是这么用,至于不使用泛型会出现具体什么还没看到.....谢谢你!  发表于 2012-7-15 16:48
回复 使用道具 举报
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, 下载次数: 33)

捕获.PNG
回复 使用道具 举报
楼主到后面就知道了,集合中对象类型不必一致,集合可以存放多种类型的对象。
泛型就是一个例子:List<Integer> list = new ArrayList<Integer>();    List<String> list = new ArrayList<String>();
在List集合中可以存放Integer,也可以存放String类型的对象······至于泛型的概念和作用,楼上已经说得很清楚了。楼主加油!

回复 使用道具 举报
刘笑 发表于 2012-7-15 17:22
楼主到后面就知道了,集合中对象类型不必一致,集合可以存放多种类型的对象。
泛型就是一个例子:List list ...

嗯嗯,谢谢,加油,Up Up Up!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马