题序:很多时候,我们专心研究一个东西的时候,往往忘记了我们最初的目的是什么。
曾经研究过那么久的Java集合框架,为了搞清里面的细节,甚至都跑去重新买了一本数据结构,终于知道了线性表,知道了树,知道了查找表。也自己动手实现了ArrayList,LinkedList,HashMap等。
今天在公交车上,突然想到“我们为什么要使用Java集合框架呢?”竟然一时语塞,半天想不起来,也说不出个所以然呢。顿时悲从中来啊。还是决定再次好好复习一把,现总结如下:
PS.还是那句老话,如果这些问题您都能轻松解答,没必要再浪费时间看下去了。
- Question one:我们为什么要使用集合框架?
- Question two:关于ArrayList 和Vector (HashMap和HashTable)PS
- Question three:总体把握,集合框架的继承图
- Question four:set 于map的关系(见李兴华书)
- Question five:关于set(底层实现,关于TreeSet,关于排序,关于比较对象相等)
- Question six: 已经存在了那么多的动态结构,为什么需要hash表?
- Question seven:TreeMap 底层实现
Question One:我们为什么使用集合框架?
大家还记得我们为什么要使用数组嘛?
当我们需要保持一组一样(类型相同)的元素的时候,我们应该使用一个容器来保存,数组就是这样一个容器。
那么,数组的缺点是什么呢?
数组一旦定义,长度将不能再变化。
然而在我们的开发实践中,经常需要保存一些变长的数据集合,于是,我们需要一些能够动态增长长度的容器来保存我们的数据。
而我们需要对数据的保存的逻辑可能各种各样,于是就有了各种各样的数据结构。我们将数据结构在Java中实现,于是就有了我们的集合框架。
Question Two: List和Vector,HashMap和 HashTable 的区别在哪里呢?
前者都是在JDK1.2后推出的,在前者中,因为采用异步处理方式,性能更高。
(其实就是删掉了后者中操作数据{add
,remove等}时的线程同步锁,这样,效率更高了,但是却不再是线程安全的了,要线程安全,必须用户在程序中使用时自己控制。)
Question Three:集合框架继承图
本来想自己画个简图的,结果悲催的Rational
Rose一直在抽风,也没时间去弄那个了。就网上Down了一个,暂且用着吧
从这个图中,我们可以发现:Collection 接口包括List和Set两个子接口(其实还有Queue和Sorted两个子接口)
另外,也验证了我们前面说的,Array和Collection都是用来保存数据的容器。
Question Four:Set 和 Map 有什么关系?
从Question
Three的继承图中,我们很明显的发现:Map虽然不像Set那样属 于 Collection,但是Set和Map的继承图是如此的相似。那么,他们之间到底有什么样的 关系呢?
从逻辑上来说:首先,如果我们只考察Map中的key,那么显然,这个key的集合就是一 个set:不能重复,无序。(Map中有keyset()的方法,能直接得到key的set)另外一 个层面,如果我们 将Map中的key何value当做一个整体,那么,显然,这个时候 的Map其实就是一个Set(在Map的实现中,都是通过一个内部类来将key和value当做 一个整体entity),
从代码角度本身角度来看,无论是HashSet还是TreeSet其实使用的都是对应 的Tree来实现的,我们用一个默认的Object,这样就可以存了。
而事实上Set的底层实现中,我们也可以发现,都是用对应的Map来实现的,只是,在每次存key-value 对的时候,都默认给了一个Object 类作为Value的默认值,
Question five:关于set(底层实现,关于TreeSet,关于排序,关于比较对象相等)
我们知道,Set是无序的,同时又是不能重复的,那么,这种不能重复性,是如何保证的呢? 其实这个问题问的还是不到位,Question Four已经说了,底层是由Map实现的,那么都是由Map来实现的。
为了唯一性,重点是能识别相同的元素(如何判断相等)
在Java中,=号,表示内存地址相等,即是指向堆内存的同一引用,那么此时,显然两个元素是相等的。
当不是指向堆内存的同一引用时。我们就需要重写Object类的equals()方法了。在此,我们判断,如果我们需要比较的各个属性相等的话,那么则可认为这两个对象相等(关于属性相等的比较与此类似)
Question six: 已经存在了那么多的动态结构,为什么需要Hash表?
其实这个问题其实问的不恰当,应该是,有了诸如顺序表和有序表这样的静态表,诸如二叉排序树 平衡二叉树这样的动态表,为什么还需要Hash表呢?
因为记录在表中的位置和它的关键字之间不存在一个确定的关系。查找的过程为给定值依次和关键字集合中各个关键字进行比较。查找的效率取决于和给定值进行比较的关键字个数。
Question Seven: TreeMap 底层实现
TreeMap 底层由红黑树(Red-Black tree)实现。因为此部分内容包括算法分析,具体代码实现以及性能分析,内容比较多,所以本部分内容稍后专门用一个日志来推出。(形式类似HashMap那篇日志)
- 大小: 4.4 KB
分享到:
相关推荐
在使用集合框架时,我们还需要了解迭代器(Iterator)和泛型(Generic)的概念。迭代器用于遍历集合中的元素,提供remove()方法删除元素。泛型则增强了类型安全性,避免了运行时类型转换异常,提高了代码可读性和复用性...
总结,Java集合框架为开发者提供了强大的数据管理能力。理解和熟练运用集合框架,不仅可以提升代码质量,也能在面对复杂问题时游刃有余。无论是基础的增删查改,还是高级的并发控制、性能优化,都离不开对集合框架的...
集合框架练习 在 Java 中,集合框架(Java Collections Framework)是 Java 语言中的一种数据结构,可以用来存储和操作大量数据。集合框架提供了多种数据结构,如...熟悉集合框架的使用可以提高编程效率和代码质量。
本文旨在为读者提供关于Java集合框架的概览性介绍,帮助理解其整体架构与设计理念。对于希望深入掌握特定接口或类使用方法的学习者,建议查阅官方提供的Java API文档。 #### 一、概述 数据结构在软件开发中扮演着...
在Java编程语言中,集合框架是开发者日常工作中不可或缺的一部分,它提供了一种高效管理对象的方式。本文将深入探讨集合框架的总结,重点关注其核心...对于开发人员来说,掌握集合框架的使用和源码分析是一项必备技能。
通过使用集合框架,开发人员可以轻松地管理不同类型的数据集,并且能够利用Java集合框架提供的高效算法进行数据处理。 在Java集合框架中,主要有六种核心接口:`Collection`, `Set`, `List`, `Queue`, `Deque`, 和 ...
Java集合框架是Java编程语言中的一个核心组成部分,它为存储、管理和操作对象提供了一套统一的接口和类。本文将深入解析Java集合框架的各个方面,包括Collection、List、Set和Map,以及它们的相关实现和使用原理。 ...
Java集合框架是Java编程语言中一个至关重要的组成部分,它为数据存储和操作提供了丰富的类库。泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的...
Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高效的数据结构和操作这些数据结构的方法。泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入...
在使用集合框架时,应考虑对象的初始容量、负载因子等参数,以减少不必要的内存分配和扩容操作。例如,`HashMap`的默认初始容量是16,负载因子是0.75,可以根据实际需求调整。 通过深入学习和分析集合框架的源码,...
Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的类库。在Java中,集合框架主要包括接口(如List、Set、Queue)和实现这些接口的类(如ArrayList、HashSet、LinkedList等)。这个...
集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中
在使用集合框架时,迭代器(Iterator)扮演着重要角色。迭代器提供了访问集合元素的方法,如`hasNext()`用于检查是否还有更多元素,`next()`用于获取下一个元素。值得注意的是,迭代器支持安全的元素删除,通过调用`...
本文档将深入探讨Java集合框架的关键组成部分、它们之间的关系以及如何有效地使用它们。 #### 二、Java集合框架结构 Java集合框架的核心部分包括以下几类: - **集合接口**:主要包括`Collection`、`Set`、`List`...
集合框架与泛型是Java...通过合理使用集合框架和泛型,开发者可以编写出更加高效、安全的代码,减少运行时错误,提高代码的可读性和可维护性。在实际项目中,熟练掌握这两者对于任何Java开发人员来说都是至关重要的。
Java集合框架是Java编程语言中一个至关重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理各种类型的数据。本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java...
"Java集合框架面试题" Java 集合框架是 Java 语言中的一组预定义类和接口的集合,用于存储和操作数据。下面是 Java 集合框架的知识点总结: 1. Java 集合类主要有两大分支:Collection 接口和 Map 接口。...