第十一章 持有对象 导读
2016-08-26 14:24
274 查看
导读:
如果一个程序只包含固定数量且生命周期都是已知的对象,那么这是一个非常简单的程序。问题所在:通常程序总是根据运行时才知道的某些条件去创建对象。在此之前,不会知道所需对象的数量,甚至不知道确切的对象类型。
为了解决这个问题,需要在任意时刻和任意位置创建任意数量的对象。所以就不能依靠引用来持有每一个对象,因为数量可能会很多。
java有多种方式保存对象(应该是对象的引用)。例如数组,
但数组具有固定的尺寸,更多的情况下并不知道需要多少个对象,如Android中的listview,这样数组就受到了限制。
java实用类库还提供了一套相当完整的容器类来解决这个问题,如List、Set、Queue、Map等。用来保存对象。
可以将任意数量的对象放置到容器中去。
Java使用Collection这个名字来指代该类库的一个子集。
1.泛型和类型安全的容器
java se5之前容器是没有泛型的,以ArrayList为例,所有的都是ArrayList<Object>的,所以它允许向容器中插入任何类型的对象,这样做会有很多问题出现,进去的是详细的类型,而出来是确是Object的了,如果要使用就要强制类型转换,转换错了,程序就会
抛出错误。
Java SE5 之后引入的了泛型,如果想容器中插入类型错误的对象,编译器会报告警告异常。如ArrayList<String> 插入int型数据。
从一个List中get一个数据是并不需要转型,因为在调用list.get(position)时list已经执行了转型了
容器中可以插入泛型的子类,允许向上转型,如ArrayList<Book> class Math extends Book 那么List<Book>也可以添加list.add(new Math())、
2.基本概念
Collection 及其子类(List Set Queue) Map及其子类将在容器中介绍。3.添加一组元素(ArrayList.....子类的简单使用)
public class AddingGroup { public static void main(String[] args) { Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5)); Integer[] moreInt = {6,7,8,9,10}; //添加数组到collection collection.addAll(Arrays.asList(moreInt)); //将数组添加到collection后 Collections.addAll(collection, 11,12,13,14,15); Collections.addAll(collection, moreInt); List<Integer> list = Arrays.asList(1,2,3,4); } }
4.显示类型参数说明
这个bug在java 1.8的时候已经消除了class Snow{} class Powder extends Snow{} class Light extends Powder{} class Heavy extends Powder{} class Crusty extends Snow{} class Slush extends Snow{} public class AsListInference { public static void main(String[] args) { List<Snow> snow1 = Arrays.asList(new Crusty(),new Slush(),new Powder()); //这里在java 1.8之前asList方法会返回Light 和Heavy List<Powder>的形式的list List<Snow> snow2 = Arrays.asList(new Light(),new Heavy()); //需要这样才能解决上面的问题,这叫做“显式类型参数说明” List<Snow> snow3 = Arrays.<Snow>asList(new Light(),new Heavy()); System.out.println(snow2.get(0)); } }
相关文章推荐
- 第十一章 持有对象
- 第十一章——持有对象
- 读书笔记 Think in Java 4th 第十一章 持有对象 List、Set、Queue和Map
- java编程思想读书笔记----第十一章 持有对象
- Java编程思想第四版第十一章学习——持有对象
- Java编程思想笔记第十一章(持有对象)
- 《JAVA编程思想》学习笔记---第十一章:持有对象
- #Thinking in Java阅读笔记# 第十一章 持有对象
- Thinking in Java——第十一章-持有对象
- Thinking in Java:第十一章-持有对象
- 第十一章:持有对象 《Thinking in java》学习笔记
- 第十一章 持有对象
- JAVA编程思想学习总结:第十一章持有对象
- 第十一章 持有对象
- 再读thinking in java 第十一章 持有对象
- 《JAVA编程思想》学习笔记——第十一章 持有对象
- 《Java编程思想》第四版读书笔记 第十一章 持有对象
- 第十一章 持有对象
- java编程思想读书笔记 第十一章 持有对象(中)
- java编程思想读书笔记 第十一章 持有对象(下)