`
悲剧了
  • 浏览: 144369 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

thinking in java 读书笔记(六)

阅读更多
第八章--对象的容纳
    第七章让我感到艰难,以为后面也是,顿生挫折感,虽然知道这正是进步的开始,但是负面情绪很难摆脱。没想到这章,这么不给力。
     如果你读过JDK util包的源码,这章简直就是小儿科,util包下面的集合类,在iteye上很多人都写过分析,一些甚至靠这个分析出了书,比如那本 分布式java应用,占据了很大一部分内容,就是测试每个集合的性能,想想就觉得我的钱真给糟蹋了,if是国内的书,那么一些牛人推荐的书不一定是好书。
不过util里面还是有很多细节的,目前自己就看了几个常用的类,这里面提到的旧版本的集合类,基本就没看过。比如那个BitSet


作者提出:
引用

  我们的程序需要根据程序运行时才知道的一些标准创建新对象。若非程序正式运行,否则我们根本不
知道自己到底需要多少数量的对象,甚至不知道它们的准确类型。为了满足常规编程的需要,我们要求能在
任何时候、任何地点创建任意数量的对象。


    首先用java内置的方式数组解决,但是数组本身存在问题,是一种运行期检查,越界只有在运行期发会发现,而且没有相关的好操作的方法。若能创建和访问一个基本数据类型数组,那么比起访问一个封装数据的集合,前者的效率会高出许多.effective java 提出 能使用基本类型就尽量使用基本类型
    什么时候用集合,什么时候用数组,集合什么时候写上泛型,泛型带来的额外编程支出是否值得?
    参考http://aladdin.iteye.com/blog/40898

引用

数组是JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素。但是速度是要有代价的,当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里是不能改变的。还有一点,JAVA里面的数组是会做边界检查的,所以当你越界访问时,会抛出RuntimeException,所以不用担心在C或C++因为不做边界检查而出现的问题了,当然边界检查是以牺牲效率为代价的。数组与其它容器类的区别体现在三个方面:效率、类型识别和可以持有primitives。
     JAVA里面提供的其他容器还包括List,Set和Map。他们处理对象的时候就好像这些这些对象都没有自己的类型一样,容器将它所含的元素都看成是JAVA中所有类的根类Object类型的,这样我们只需创建一种容器,就能把所有的类型的对象全部放进去。但是当取出的时候,那就需要我们自己进行类型转换了,不过在JAVA Tiger版里面新引入了“泛型”的概念,结合容器类一起使用就可以解决类型转换的问题,关于“泛型”这就不详细讲解了。从上面的角度来看,这种做法很不错,但是就是苦了primitives,如果是常量的话,可以把primitive转换成wrapper类然后放进容器里面,如果是变量的话,那就只能放在你自己的类里了。与其他容器类相比,数组会在编译的时候作类型检查,从而防止你插入错误类型的对象,或者在提取对象的时候把对象的类型给搞错了,JAVA在编译和运行的时候都能阻止你将一个不恰当的消息传给对象。至于效率,数组无疑是要高于其他容器类的,因为有些容器类的实现就是基于数组的,比如ArrayList。不论从类型检查还是效率的角度来考虑,我们首选数组来作为容器都是没错的,但是数组的缺点就是功能太弱了,所以才会有容器类的出现




      Vector 里面有一个Enumeration的nested class,如上一章分析的匿名类一样
nested class 的用法,黄金搭档effective java里面说,静态成员  非静态成员 方法内部的匿名类 局部类(可声明局部变量的地方)effective java简直就是thinking in java的黄金搭档,里面全部论述了。

      里面提到不能指定类型的问题,没有涉及到泛型这种语法糖,用组合的方式自己解决了问题。写这个文章1.5还没出,作者就感慨了c++的temple

最后:
    至于里面每个集合类,还是非常值得去看JDK源码的,坛子里面也有好多分析,感兴趣可以搜搜,我对并发包下面的集合类还不熟,要赶紧看了。





分享到:
评论

相关推荐

    Thinking in Java读书笔记

    ### Thinking in Java 读书笔记知识点总结 #### 一、万事万物皆对象 1. **对象存储位置** - **寄存器**:程序无法直接控制。 - **栈(Stack)**:存储基本类型数据和对象引用,但对象本身不在此处。 - **堆(Heap)...

    王者归来之Thinking in java读书笔记

    《王者归来之Thinking in Java读书笔记》是对Bruce Eckel的经典之作《Thinking in Java》第四版的深度学习与总结。这本书是Java程序员的必备参考书,它深入浅出地阐述了Java语言的核心概念和技术,旨在帮助读者理解...

    thinking in java读书笔记

    ### Thinking in Java 读书笔记知识点总结 #### 一、构造器与方法重载 1. **构造器的特点**: - 构造器不返回任何值,与返回`void`不同。 - 当未在类中声明构造器时,编译器会自动生成一个默认的无参构造器。 - ...

    thinking in java 读书笔记(五)

    这篇读书笔记主要聚焦在第五部分的内容,可能涵盖了类、对象、继承、多态等关键主题。由于没有具体的描述内容,我将根据《Thinking in Java》第五部分的一般性知识点进行阐述。 1. **类与对象**:在Java中,类是...

    Thinking in java读书笔记.docx

    《Thinking in Java》是Bruce Eckel的经典之作,这本书深入探讨了Java编程的各个方面。以下是根据提供的部分内容提炼出的一些核心知识点: 1. **访问修饰符**: - `public`:公共访问修饰符,允许所有类访问。 - ...

    thinking in java读书笔记(2)

    Java 编程基础 - 继承和复用 在 Java 编程中,继承和复用是两个非常重要的概念。继承允许我们创建出新的类,继承自已有的类,从而实现代码的重用和扩展。今天,我们将讨论继承和复用相关的知识点,并通过实践例子来...

    读书笔记:Thinking in Java (Java 编程思想).zip

    读书笔记:Thinking in Java (Java 编程思想)

    《Thinking+in+Java》读书笔记共38页.pd

    总之,《Thinking in Java》的读书笔记结合了广泛的Java知识和实践应用,从基础知识到高级主题,从理论到实践,为学习和提升Java编程技能提供了全面的资源。无论是对初学者还是经验丰富的开发者,这都是一个宝贵的...

    java基础补足和thinking In Java学习.rar

    《Java学习笔记》 此书的特点在于里面有很多作者对Java语言的独有的理解与讲解,这些内容往往也是所有Java语言初学者迷惑的地方。称之为超简明入门书籍也不为过。 《Java核心技术:卷1基础知识》 这系列...

    JAVA 编程思想 思维导图Thinking_in_Java_MindMapping-master

    然后用Mindjet Mindmanager做了读书笔记,跟大家分享一下~ 1. 这个思维导图的读书笔记没有涵盖书中的所有知识点,但是作为框架和读书的思路比较清晰。 2. 思维导图中有很多代码在note中,没有贴到博客中。 3. 思维...

    TIJ4Reusing Classes

    thinking in java 4 Reusing Classes 读书笔记

    BookReading:读书笔记

    在《BookReading》的笔记中,你会看到对《Thinking in Java》这本书的解读,这本书是Bruce Eckel的经典之作,详细介绍了Java的基础知识和高级特性。你将了解到如何创建和使用类,如何处理异常,以及如何进行多线程...

    java软件笔试题-MyNotebook:我大学时期的笔记本

    java软件笔试题 my notebook 我的笔记本,大部分是在大二大三的时候写的笔记,对于已经毕业的来说可能比较基础甚至naive。...7:读书笔记 thinking in java effective java Android开发艺术探索 Android插件化开发指南

    j_bc_bj.rar_Java编程_Java_

    《java编程思想读书笔记.doc》可能是一个详细记录了读者在阅读经典著作《Thinking in Java》时的心得体会和重要知识点总结。这本书深入浅出地介绍了Java的核心概念,包括面向对象编程的基础,如类、对象、封装、继承...

Global site tag (gtag.js) - Google Analytics