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》第11章“持有对象”中的核心知识点,理解并掌握这些概念对于深入理解和使用Java对象是非常重要的。通过实践和编程练习,你可以更好地领悟这些知识,并应用到实际项目中。
《Think in Java 中文文档》作为一本深入讲解Java编程语言的教材,不仅适合有志于深入学习Java的程序员,也适合那些希望拓展自己技术栈的初学者。本书通过系统性的结构和丰富的实例,帮助读者全面理解Java,并最终...
《Think in Java》是Bruce Eckel的经典编程教材,它深入浅出地讲解了Java语言的基础概念和高级特性。源码整理则为读者提供了实践和学习的机会,帮助理解书中的示例和理论。以下是对《Think in Java》源码中一些重要...
《Think in Java》是Java编程领域的一本经典著作,由Bruce Eckel撰写,深受程序员喜爱。这本书通过深入浅出的方式讲解了Java语言的核心概念和技术,包括面向对象编程、数据结构、算法以及网络编程等多个方面。"Think...
通过对《Think in Java 3》的学习,读者不仅可以掌握Java语言的基础知识,还能深入理解面向对象编程的思想,提升编程技能和解决问题的能力。这本书适合所有层次的Java开发者,无论你是初学者还是经验丰富的程序员,...
Think in java 源码构建编译
java think in java (英文第四版)至今为止 被认为是java教程之中权威作品之一
《Think in Java》是 Bruce Eckel 的经典著作,它深入浅出地讲解了Java编程语言的核心概念和技术。这本书强调理解编程思想,而不仅仅是学习语法。练习题是学习过程中的重要部分,它们帮助我们巩固理论知识,提升实际...
java 教程 think in java,java 教程 think in java
《Think In Java 4》是Java编程领域里一本极具影响力的著作,由资深程序员 Bruce Eckel 编著。这本书以其深入浅出的讲解方式和全面的知识覆盖而闻名,被誉为Java学习者的经典读物。中文版的完美高清版本为国内读者...
《Think in Java 中文第四版》是学习Java编程的经典之作,由Bruce Eckel撰写,它深入浅出地讲解了Java语言的核心概念和技术。本部分主要涵盖的是书籍的第二部分,通常涉及面向对象编程的深入探讨,包括类、对象、...
Think in Java(美)Bruce Eckel 著 陈昊鹏 译 引言 同人类任何语言一样,Java为我们提供了一种表达思想的方式。如操作得当,同其他方式相 比,随着问题变得愈大和愈复杂,这种表达方式的方便性和灵活性会显露无遗。 ...
think in java 第四版 源码以及作业 eclipse版本 包含jar包 可以直接导入eclipse
《Think in Java》是Java编程领域的一本经典之作,由Bruce Eckel撰写,中文版第四版更是深受广大Java程序员喜爱。这本书深入浅出地讲解了Java语言的核心概念和编程技术,旨在帮助读者不仅仅是学习语法,而是理解Java...
Think Data Structures in Java 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
《Think in JAVA 编程思想》是Java编程领域的一本经典著作,由Bruce Eckel撰写。第四版作为该书的最新版本,包含了作者对Java语言深入的理解和丰富的编程经验,旨在帮助读者理解面向对象编程的核心理念,并提升编程...
《Think in Java》是Java编程领域的一本经典著作,由Bruce Eckel撰写,中文版的出现使得更多中国程序员能够深入理解和掌握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 think in java think in java
《Think in Java 4》是Java编程领域的一部经典之作,由Bruce Eckel撰写,它以其深入浅出的讲解方式和丰富的示例代码深受程序员喜爱。这个压缩包包含的就是这本书的全部源代码,旨在帮助读者更好地理解和实践书中所...