java核心技术卷一笔记7

肥肥的蚂蚁      2022-06-14     259

关键词:

第九章 集合

9.1 Java集合框架

在Java类库中,集合类的基本接口是Collection接口。

访问集合元素时,使用“for each”循环编译器会将其翻译成带有迭代器的循环。

元素被访问的数据取决于集合类型,对于ArrayList进行迭代就会按顺序得到元素。

而访问HashSet的元素则会获得一个随机的元素序列。

对于C++而言,迭代器就是直接指向元素的,而对于Java而言,迭代器是夹在元素之间的,每调用一次next方法就返回一个刚刚越过的元素。

Iterator接口的remove方法是删除上一次调用next返回的元素,打个比方说就是如果要删除第一个元素,要先调用一次next方法,此时再调用remove就会删除第一个元素。

9.2 具体的集合

ArrayList是数组列表,LinkedList是双向链表。

对于链表而言,如果向一个指向链表表头的迭代器调用add方法,新增加的元素会变成列表的新表头。若迭代器越过了最后一个元素,此时调用add方法就会向表尾新增元素。如果链表有n个元素,有n+1个位置可以添加新元素。

为避免迭代器变成无效,应该只设置一个可读可写的迭代器,其他迭代器仅可读。

LinkedList的get方法有一定的优化,比如传入的索引大于长度的一半就会从尾部开始搜索元素。

Iterator接口为了抽象在有序集合和无序集合之上,如add方法仅对于有序集合才有意义,因此在Iterator接口中并没有add方法,但在它的子接口ListIterator中就有这个方法了。

动态数组可以使用ArrayList或者Vector,但是Vector的所有方法是同步的,会产生相应的开销。所以在不需要同步时应用ArrayList。

HashSet是一个基于散列表的集合。

TreeSet是一个有序集合,可以以任意顺序将元素插入集合,但遍历时会得到一个有序序列。

优先队列采用了堆实现,它是一个可以自我调整的二叉树,对树进行添加和删除操作时可以让最小的元素移动到根。

9.3 映射

散列映射HashMap对键进行散列,树映射用键的整体顺序对元素进行排序,并将其组织成树。

散列或比较函数只能作用于键。散列映射相比树映射不需要排序,建立映射更快。

对一个键调用两次put方法,后一次的值会覆盖前一次的值。put有返回值,就是上一次该键存储的值。

entrySet是键值对集视图,集中可以删除但不能新增。

LinkedHashMap链接散列映射可以采用访问顺序而不是插入顺序对映射条目进行迭代。每次调用get或put时受到影响的条目将从当前位置删除并放到条目链表的尾部。

9.4 视图和包装器

Arrays.asList方法返回的对象并不是ArrayList,而是一个视图对象。

视图只包装了接口而不是实际的集合对象,只能访问接口中定义的方法。

9.5 算法

二分查找binarySearch若返回负数,代表该元素未找到。返回值的相反数再-1则是查找值应该插入的位置。

集合转数组时使用的toArray方法得到的是一个对象数组,而且不能对其直接强转。相反,应该是在toArray的参数中传入所需类型且长度为0的数组。

Properties类实现了Map接口。

《java核心技术(卷一)》读书笔记——第六章:内部类

1.      内部类的概念?类中类2.      为什么要用内部类?内部类的方法可以访问外部类的实例域内部类对外部类的同一个包中的类实现了隐藏匿名内部类在“想要定义一个回调函数却... 查看详情

java核心技术卷一笔记六date类

在Java核心技术卷就行了一前期 date类出现的频率很高 所以就对date类进行了小小的整合Date类有两个date类表示特定时间的类 这个构造函数分配一个Date对象并初始化它代表指定的毫秒数,因为被称为“纪元”,即1970年1... 查看详情

《java核心技术卷一》随笔

1.静态常量:  静态变量使用得比较少,但静态常量使用得比较多,例如,在Math类中定义了一个静态常量:  publicstaticfinalPI=3.141592653;  在程序中,可以采用Math.PI的形式获得这个常量。  如果关键字static被省略,PI就变... 查看详情

关于java核心技术(卷一)读后的思考(回调,clone的讨论)

回调回调是一种常见的程序设计模式。这种模式中,可以指出某个特定事件发生时应该采取的动作。直接给上代码packagecom.java.timer;importjava.awt.event.ActionListener;importjavax.swing.JOptionPane;importjavax.swing.Timer;publicclassTimerTest{publicstaticvoidm 查看详情

关于java核心技术(卷一)读后的思考(内部类的讨论)

内部类内部类是定义在另一个类中的类。定义内部类的原因有:1)内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。2)内部类可以对同一个包中的其他类隐藏起来。3)当想要定义一个回调函数且不想编写... 查看详情

关于java核心技术(卷一)读后的思考(equals方法的讨论)

这是我反复看了两遍才理解的部分。其中也不乏参考了他人的微博内容,才大致对这个方法有所理解。首先我们从Object类开始说起,书中已经说了Object类是Java中所有类的始祖,在Java中的每个类都是由他扩展而来的,但在现实使... 查看详情

关于java核心技术(卷一)读后的思考(泛型数组列表的讨论)

在C++中编译时是要确定数组大小的,而Java有所不同,它允许在运行时确定数组的大小。但是如果仅通过数组是无法改变运行时无法动态更改数组的问题。一旦确定了数组大小,就很难改变他了数组的大小了,要解决这个问题,... 查看详情

关于java核心技术(卷一)读后的思考(接口的基本知识的讨论)

接口接口技术:这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。一个类可以实现一个或多个接口,并在需要接口的地方,随时使用实现了相应接口对象。接口概念:接口不是类,而是对类的一组需求的... 查看详情

go语言核心技术(卷一)之2.1-整数

第二章序 在计算机底层,一切都是比特位。然而计算机一般都操作固定大小的数,称之为字(word)。字会被解释为整数、浮点数、比特位数组、内存地址等,这些字又可以进一步聚合成数据包(packet)、像素点、作品集、是个或者... 查看详情

关于java核心技术(卷一)读后的思考(对象与类,日历的构造)

关于这本书,前三张都是基本内容,我觉得个人掌握的还可以,所以从第四章开始整理每日所学。第四章主要说的是对象和类。第一部分是面向对象程序设计的概述。其中面向对象程序设计简写OOP,接下来写的是类,即构造对象... 查看详情

关于java核心技术(卷一)读后的思考(lambda表达式的讨论)

lambda表达式lambda表达式是一个可传递的代码块。可以以后执行一次或者多次。在程序运行中我们经常会遇到传递代码段的情况,但是我们一般都是先构造一个对象,然后通过对象调用相应的代码块来实现传递代码块的目的,这个... 查看详情

关于java核心技术(卷一)读后的思考(用户自定义类,静态域和静态方法的思考以及方法参数)

用户自定义类:这部分并没有太过于困难的部分,借由代码进行复习:Employee类的定义:packagecom.java.EmployeeTest;importjava.time.*;publicclassEmployee{   privateStringname;   privatedoublesalary;  &nb 查看详情

给大忙人看的java核心技术笔记(7集合)

要点:  1、Collection接口为所有集合类提供了共同方法(映射除外,映射是通过Map接口描述的)  2、列表是一个有序集合,其中的每个元素都有一个整数索引  3、set针对高效包含测试进行过优化。Java提供了HashSet和TreeSet... 查看详情

书单

...不过没发现有多大的用处,整理一下以便以后复读。1.Java核心技术(卷一),Java核心技术(卷二)2.Java编程思想3.headfirst设计模式4.EffectiveJava5.重构:改善既有代码的设计6.redis实战(未完)7.大型网站系统与Java中间件实践(未完... 查看详情

面霸篇:高频java基础问题(核心卷一)(代码片段)

从面试题作为切入点提升大家的Java内功,所谓根基不牢,地动山摇。只有扎实的基础,才是写出写好代码。拒绝知识碎片化码哥在《Redis系列》的开篇Redis为什么这么快中说过:学习一个技术,通常只接触了零... 查看详情

读书列表

 记录读书列表,促进阅读~蓝血十杰2017-04-20百年孤独(英文版)ThinkinginC++(英文版)卷一2017-04-26ThinkinginC++(英文版)卷二ReadingCodeJava核心技术卷一Java核心技术卷二重构    查看详情

java异常笔记

1:《java核心技术卷一》473页提到:如果在子类中覆盖了超类的一个方法,子类方法中声明的已检查异常不能超过超类方法中声明的异常范围。显然,如果子类中抛出的异常范围比超类还大。多态将无法进行异常处理(我们永远无... 查看详情

小计划

...今年的小目标是, 书本《JavaWeb整合开发实战》《Java核心技术卷一》《Java核心技术卷二》《图解HTTTP》《HeadFirstJava》--------------------------------这些先实现了-----------------------下面的查考。-------------------2.《EffectiveJava》《Jav 查看详情