问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

为什么要使用集合框架?

发布网友 发布时间:2022-04-26 13:32

我来回答

1个回答

热心网友 时间:2023-10-09 18:42

题序:很多时候,我们专心研究一个东西的时候,往往忘记了我们最初的目的是什么。曾经研究过那么久的Java集合框架,为了搞清里面的细节,甚至都跑去重新买了一本数据结构,终于知道了线性表,知道了树,知道了查找表。也自己动手实现了ArrayList,LinkedList,HashMap等。今天在公交车上,突然想到“我们为什么要使用Java集合框架呢?”竟然一时语塞,半天想不起来,也说不出个所以然呢。顿时悲从中来啊。还是决定再次好好复习一把,现总结如下:PS.还是那句老话,如果这些问题您都能轻松解答,没必要再浪费时间看下去了。Question one:我们为什么要使用集合框架?Question two:关于ArrayList 和Vector (HashMap和HashTable)PSQuestion 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表呢?因为记录在表中的位置和它的关键字之间不存在一个确定的关系。查找的过程为给定值依次和关键字集合中各个关键字进行比较。查找的效率取决于和给定值进行比较的关键字个数。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为p7支持法语操作系统? 大白鲨HD6750 1GB GDDR5白金版这个显卡怎么样? 请高手们看看我的配置,加装显卡精影HD6670和HD6750哪个比较合适点... 蓝宝石HD 6750 1GB GDDR5白金版基本参数 ...HD5770 HD6750 HD6670 这几个显卡哪个好一些?大神们帮帮忙 蓝宝HD6750 1GB GDDR5白金版重要参数 ...是蓝宝石 HD6670 1G DDR5 白金版 HD6770 1G DDR5 白金版 HD6750 1G... 蓝宝石: HD6750/1G 黄金版和HD6670 1GB GDDR5白金版哪个好点啊?我的... 如何理解“从众”心理是一把“双刃剑”。 领动用5W30还是用5W40啊 中国古典音乐,最好有传统中国乐器伴奏的。 为什么用名词修饰名词? 请大家推荐一些流行歌曲里带有中国乐器伴奏的歌,像“青衣”,“青花瓷”类似的歌曲,谢谢! 为什么要使用正版软件,使用正版软件有什么好处? 用中国传统乐器作伴奏的歌曲 为什么要使用JavaScript,使用它有什么好处? 谁能推荐几首中国风的歌曲 最好是有古筝 箫 伴奏的 为什么使用? 为什么要使用 CSS 为什么要用Spring 关于“近朱者赤 近墨者黑”的驳论文 屏幕自己漏液是什么原因造成的啊? 近朱者赤近墨者黑的事例和名言内容是什么? 什么为什么用成语 近红者赤近墨者黑议论文 什么为什么用用成语 近朱者赤近墨者黑话题作文 什么为什么用 近朱者赤近墨者黑议论文800字怎么写高中作文? 以近朱者赤,近墨者黑为话题写一篇600字的议论文 为什么用ing 现在大家为什么喜欢使用移动支付工具呢? 为什么使用http 有没有欢快的中国风的歌曲(跳舞配乐) 我想找一些中国民歌,要优雅,抒情,女声,最好是我国民族乐器伴奏的,请大家推荐 求中国古乐器伴奏的歌曲 谁推荐几首中国风的歌曲,里面有古筝伴奏的,歌词有诗意的最好! 中国军魂 合唱伴奏 完整mp3 中国好声音歌曲伴奏纯音乐 急!急!急!《中国字中国人》歌曲伴奏 中国,中国,鲜红的太阳永不落-童声的伴奏音乐,不要人声!!高分跪求求 小学四年级歌曲《中国人》伴奏曲 中国音乐伴奏网怎么找不到啊? 求男中音的美声中国艺术歌曲伴奏!(绝大部分)希望有的给个。 打10010怎么转人工服务通不能转人工的原因是? 电信为啥转不了人工服务了 电信为什么没有人工服务? 电信客服电话到底能不能转接人工服务呀?语音根本就听不懂。 电信客服电话到底能不能转接人工服务呀?语音根本就听不明白。 为什么中国电信没有人工服务?谁知道怎么打?