public class ApplesAndOrangesWithGenerics {
public static void main(String[] args) {
ArrayList<Apple> apples = new ArrayList<Apple>();
for(int i = 0; i < 3; i++)
apples.add(new Apple());
// Compile-time error:
// apples.add(new Orange());
for(int i = 0; i < apples.size(); i++)
System.out.println(apples.get(i).id());//在get时候替你执行转型
// Using foreach:
for(Apple c : apples)
System.out.println(c.id());
}
}
11.3 添加一组元素:
Collections下的addAll()方法接受一个Collection对象,以及一个数组或是一个逗号分割的列表,将元素添加到Collection对象中 例如:
Collection<Integer> collection =
new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Integer[] moreInts = { 6, 7, 8, 9, 10 };
collection.addAll(Arrays.asList(moreInts));// list对象
Collections.addAll(collection, 11, 12, 13, 14, 15)//逗号风格的列表
Collections.addAll(collection, moreInts);//数组
List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);//asList方法返回的是List 但底层表示是数组 不能调整尺寸
list.set(1, 99); // OK -- modify an element
// list.add(21); // Runtime error because 底层表示是数组 不能调整尺寸
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());
// List<Snow> snow2 = Arrays.asList(
// new Light(), new Heavy());Arrays.asList中只有Powder类型的,因此它会创建List<Powder>而不是List<Snow> 所有本句编译通不过
HashSet 最快的获取元素的方式
TreeSet 比较结果的升序排列
LinkedHashSet 添加的顺序保存对象
HashMap 无序,最快的查找速度
TreeMap 键升序保存
LinkedHashMap 添加的顺序保存对键 并保留了HashMap的查询速度
chapter 9 interfaces 接口
接口和内部类为我们提供了将接口和实现分开的方法(编程原则 :面向接口编程)我的理解是:你们公司做了一个项目,项目中你写了一个公共类XxxServer 供的各个模块使用, 每次使用的时候都需要new XxxServer ();XxxServer 散落在各个模块的代码中。这个项目很成功准备全国推广,但使用你项目的客户需求有多种,其中XxxServer需要修改。你可能就想 改XxxServer就ok了啊。是的 可以。但这“多种需求”共有10多个 这样你的XxxServer需要改10多个版本,每次给客户部署的时候你就需要把 XxxServer替换成客户需要的而且不同版本的XxxServer名字必须一样 ,因为别的模块的代码都是这样new XxxServer()使用XxxServer的。
好的方法是:使用把XxxServer声明为接口 ,定义工厂方法 getXxxServer()来得到XxxServer的具体实现,通过配置文件来决定getXxxServer()得到的是哪个具体XxxServer的实现类 这样你只需要修改配置文件就使得项目的具体功能可“配置”了
上面举的例子可能还不是“面向接口编程”好处的最好体现。大家可以看看集合框架中的设计List ArrayList LinkedList 实现。
下面是Collections.sort(list)方法 ,比较能体现接口编程的好处 ,想想看如果方法参数是具体的实现ArrayList 是什么样的情况
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
分享到:
相关推荐
学习think in java 时的第9章的例题及练习答案。 eclipse 工程包,运行可用!全自己敲的!
Think in java 源码构建编译
java think in java (英文第四版)至今为止 被认为是java教程之中权威作品之一
think in java 源码整理,应该算是比较全面的,有需要的朋友可以下下来看下
Think in java 的代码源码,里面很详细的习题详解
think in java 第四版 源码以及作业 eclipse版本 包含jar包 可以直接导入eclipse
Think Data Structures in Java 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
这是java编程思想中的练习题,自己感觉不错,上传上去给大家分享~~~~~
抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重新使用接口 1.5.1 改善基础类 1.5.2 等价和类似关系 1.6 多形对象的互换使用 1.6.1 动态绑定 ...1.11 Java和因特网
Think in java 教程 Think in java 教程
Think in Java 作者的文章 精辟见解
Think in Java(美)Bruce Eckel 著 陈昊鹏 译 引言 同人类任何语言一样,Java为我们提供了一种表达思想的方式。如操作得当,同其他方式相 比,随着问题变得愈大和愈复杂,这种表达方式的方便性和灵活性会显露无遗。 ...
编程思想第四版完整中文高清版(免费)TXT格式
第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重新使用接口 1.5.1 改善基础类 1.5.2 等价和类似关系 1.6 多形对象的互换使用 1.6.1 动态绑定 1.6.2 ...
从一程序员朋友手里tiang来的,看看对你有帮助
经典的think in java4,所有源码,帮你早日攻克java学习的堡垒!!!
think in Java答案
think in java Chinese 个人整理
Think in java 读书笔记 java教程
这是一本充满智慧的书,与简单的参考书有着截然不同的风格。它现在已成了我进行Java 创作一份主要参考。你的目录做得相当不错,让人一目了然,很快就能找到自己需要的东西。