![container](http://dl.iteye.com/upload/attachment/0071/2849/80fa9635-55cd-3e50-bfec-98430b1c4687.jpg)
1.Java中的容器类库
各容器的实现类及java.util.Collections类中的方法参照java doc
2.List及其实现:
List可以对应数据结构中的线性表,所以其实现ArrayList、LinkedList也可以对应线性表中的顺序表和链表,相应也就不难推出了两者的特点。
无论列表的大小如何,ArrayList在随机访问(即使用get()和set()方法)上都很快速(当然背后是有数组支撑的),但是在执行插入或删除操作时则开销会随尺寸的增大而变大(因为需要遍历);LinkedList则相反,在执行插入或删除操作时很快速(只是修改链接),但是在随机访问上则开销会随尺寸的增大而变大(同样是遍历)。</p>
3.Set及其实现:
![set](http://dl.iteye.com/upload/attachment/0071/2859/7eb18941-d488-38a9-9418-2ac7cb75cfd1.jpg)
4.Queue及其实现:
LinkedList及PriorityQueue。两者的差异在于LinkedList是按照放入数据的顺序产生数据,而PriorityQueue则是根据某种优先级的顺序产生数据,而这个“某种优先级”即通过继承Comparable接口实现。
5.Map及其实现:
![map](http://dl.iteye.com/upload/attachment/0071/2861/bc12125d-ba29-3ebb-9cfc-402519a40b74.jpg)
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扎堆的情况,即散列不均匀。
*关于散列的部分属于个人见解,如有不正确的地方烦请指正。
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0071/2849/80fa9635-55cd-3e50-bfec-98430b1c4687-thumb.jpg)
- 大小: 121.6 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0071/2859/7eb18941-d488-38a9-9418-2ac7cb75cfd1-thumb.jpg)
- 大小: 82 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0071/2861/bc12125d-ba29-3ebb-9cfc-402519a40b74-thumb.jpg)
- 大小: 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...
### Spring的IoC容器...- **小结**:总结Spring IoC容器的重要概念和技术细节。 以上内容覆盖了Spring IoC容器的核心概念、技术细节以及实际应用案例,希望能够帮助您深入了解Spring IoC容器的工作原理和应用场景。
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设计...
AOP(面向切面编程)是一种编程思想,它将那些横切关注点的功能从业务逻辑中解耦出来,形成独立的模块。例如日志记录、事务管理等功能,这些功能与业务逻辑本身没有直接的关系,但是又会影响到整个业务流程,使用AOP...
- **2.1.3 小结** - 数据结构的选择对程序的性能至关重要,不同的数据结构适用于不同类型的计算任务。 **2.2 算法及性能分析** - **2.2.1 算法** - 算法是一系列解决问题的清晰指令集。 - 良好的算法设计可以...
- **2.1.3 小结** - 数据结构的选择对算法效率有很大影响。 - 合适的数据结构可以简化问题,并提高程序的执行效率。 **2.2 算法及性能分析** - **2.2.1 算法** - 算法是一系列解决问题的步骤。 - 算法的设计要...
**2.1.3 小结** - 数据结构的选择对程序的效率至关重要。 ##### 2.2 算法及性能分析 **2.2.1 算法** - **定义**:算法是解决问题的一系列步骤。 - **特性**:包括输入、输出、确定性、有限性、可行性。 **2.2.2...
- **小结:** 数据结构的选择对算法的效率至关重要。 - **算法及性能分析:** - **算法:** 算法是一系列解决问题的步骤。 - **时间复杂性:** 衡量算法执行所需时间的增长率。通常使用大O符号(O-notation)来...
1.5 小结 11 第2章 基本数据类型——构建Java 大厦的基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档注释 13 2.2 基本数据类型 14 2.2.1 整型 15 2.2.2 浮点型 17 ...