1.Java中的容器类库
各容器的实现类及java.util.Collections类中的方法参照java doc
2.List及其实现:
List可以对应数据结构中的线性表,所以其实现ArrayList、LinkedList也可以对应线性表中的顺序表和链表,相应也就不难推出了两者的特点。
无论列表的大小如何,ArrayList在随机访问(即使用get()和set()方法)上都很快速(当然背后是有数组支撑的),但是在执行插入或删除操作时则开销会随尺寸的增大而变大(因为需要遍历);LinkedList则相反,在执行插入或删除操作时很快速(只是修改链接),但是在随机访问上则开销会随尺寸的增大而变大(同样是遍历)。</p>
3.Set及其实现:
4.Queue及其实现:
LinkedList及PriorityQueue。两者的差异在于LinkedList是按照放入数据的顺序产生数据,而PriorityQueue则是根据某种优先级的顺序产生数据,而这个“某种优先级”即通过继承Comparable接口实现。
5.Map及其实现:
6.关于散列码(以HashMap为例):
首先,如果要使用自己写的类作为“键”,需要适当的覆盖.equals()方法和.hashCode()方法,前者作为是否是重复键的判断条件,而要了解后者,请往下看。
假设我们有了一个Entry类的数组,该类里面封装了key和value的键值对,我们的目的是通过给定的key来获取对应的value。一般的方法是遍历数组,用.equals()方法来对key进行判等,但是这样做明显效率很低。于是变引入了哈希的方法来寻找“相等”的key,其想法就是你给我一个数组的下标(int类型),我就能快速定位到这个Entry类数组的某个元素,
于是便通过.hashCode()方法来获得这个下标(实际的HashMap对.hashCode()的值做了处理)。于是.hashCode()便责任重大,如何保证不同的key具有不同的hashCode值。
当然,要保证不同的key具有不同的hashCode值(完美散列)比较难,所以会有冲突的情况,即不同的key具有了相同的hashCode值。于是上面的假设需要修改,即我们的数组中的元素不是Entry类型,而是Entry类型的List,如果不同的key具有相同的hashCode,则把他们放入一个List中。带来的问题就是定位的数组中的元素后,仍需要遍历List,而此List的大小取决于你所编写的生成hashCode的算法,所以要尽量避免出现hashCode扎堆的情况,即散列不均匀。
*关于散列的部分属于个人见解,如有不正确的地方烦请指正。
- 大小: 121.6 KB
- 大小: 82 KB
- 大小: 129.4 KB
分享到:
相关推荐
在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...
这是清华大学的一套JAVA教程,包括详尽的例子、课后习题与解答、相关计算机英语词汇,就课程...同时Java语言是一门面向对象的语言,通过学习可以掌握用面向对象进行编程的思想和实践,使学生成为一名合格的Java程序员。
3.17 操作符小结 3.18 总结 第4章 控制执行流程 4.1 true和false 4.2 if-else 4.3 迭代 4.3.1 do-while 4.3.2 for 4.3.3 逗号操作符 4.4 Foreach语法 4.5 return 4.6 break和 continue 4.7 臭名昭著的“goto” 4.8 ...
### 第三本书:《Thinking in Java》(《Java编程思想》) #### 知识点概述 - **面向对象思想**:深入讲解面向对象的核心思想,如抽象、封装等。 - **泛型与集合**:掌握泛型的使用技巧,了解集合框架的设计理念。 ...
第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面 附录A 补充材料 可下载的补充材料 Thinking in C:Java的基础 Java编程思想 ...
全球资深Java技术专家的力作,系统、全面地讲解如何将模块化设计思想引入开发中,涵盖18个有助于实现模块化软件架构的模式 中文目录: 第一部分 模块化的理由 第1章 模块定义 1.1 定义模块 1.1.1 可部署 1.1.2 可...
全球资深Java技术专家的力作,系统、全面地讲解如何将模块化设计思想引入开发中,涵盖18个有助于实现模块化软件架构的模式 中文目录: 第一部分 模块化的理由 第1章 模块定义 1.1 定义模块 1.1.1 可部署 1.1.2...
3.7.6 循环语句小结78 3.7.7 break语句79 3.7.8 continue语句82 3.8 JavaDebug技术84 3.9 本章练习85 第4章 4.1 一维数组90 4.1.1 为什么要使用数组90 4.1.2 什么是数组91 4.1.3 如何使用数组92 4.1.4 经验之谈-数组...
10. **课程设计报告**:除了实际的代码编写,学生还需要完成一份课程设计报告,包括设计任务与要求、需求分析、设计思路、详细设计、运行调试与分析讨论和设计体会与小结等部分。 11. **需求分析**:计算器必须能够...
#### 三、面向切面编程(AOP)思想 - **面向切面编程简介**:AOP是一种软件开发技术,它旨在将跨切面的关注点(如日志记录、安全检查等)从业务逻辑中分离出来,以提高代码的可维护性和可读性。 #### 四、MVC设计...
3.4.7 小结 63 3.5 其他语言 63 3.5.1 Forth 63 3.5.2 Lisp 64 3.5.3 Java 64 3.5.4 Python、Lua、更多 65 第4章 前Windows 时代 67 4.1 386保护模式 68 4.2 VGA 到VESA 70 4.2.1 超越 BGI 70 4.2.2 VGA 72 4.2.3 ...
3.4.7 小结 63 3.5 其他语言 63 3.5.1 Forth 63 3.5.2 Lisp 64 3.5.3 Java 64 3.5.4 Python、Lua、更多 65 第4章 前Windows 时代 67 4.1 386保护模式 68 4.2 VGA 到VESA 70 4.2.1 超越 BGI 70 4.2.2 VGA 72 4.2.3 ...
AOP(面向切面编程)是一种编程思想,它将那些横切关注点的功能从业务逻辑中解耦出来,形成独立的模块。例如日志记录、事务管理等功能,这些功能与业务逻辑本身没有直接的关系,但是又会影响到整个业务流程,使用AOP...
- **2.1.3 小结** - 数据结构的选择对程序的性能至关重要,不同的数据结构适用于不同类型的计算任务。 **2.2 算法及性能分析** - **2.2.1 算法** - 算法是一系列解决问题的清晰指令集。 - 良好的算法设计可以...