爱问知识人 爱问教育 医院库

java集合类

java集合类

爱*** 22-09-10 全科知识

目录 JAVA集合类(介绍) List总结: Set总结: API 收缩展开 JAVA集合类(介绍)

在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现,我在使用和面试的时候频频遇到这样的“抉择” 。 :)(主要还是面试的时候)久而久之,也就有了一点点的心得体会,写出来以供大家讨论 。 总的说来,Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下: Collection<--List<--Vector Collection<--List<--ArrayList Collection<--List<--LinkedList Collection<--Set<--HashSet Collection<--Set<--HashSet<--LinkedHashSet Collection<--Set<--SortedSet<--TreeSet Vector : 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走入Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector“synchronized”的,这个也是Vector和ArrayList的唯一的区别。ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。

List总结:

1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ]; 2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]; 3. 所有的List中可以有null元素,例如[ tom,null,1 ]; 4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。 HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是 在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。看看 HashSet的add(Object obj)方法的实现就可以一目了然了。 public boolean add(Object obj) { return map.put(obj, PRESENT) == null; } 这个也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。 LinkedHashSet:HashSet的一个子类,一个链表。 TreeSet:SortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。(HashSet和TreeSet均为有序的顺序由小到大)

Set总结:

1. Set实现的基础是Map(HashMap); 2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象 为什么要使用集合类 当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。

理解集合类

集合类存放于java.util包中。 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。 集合类型主要有3种:set(集)、list(列表)和map(映射)。 (1)集 集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。 对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。 集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。 (2)列表 列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。 列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。 关于实现列表的集合类,是我们日常工作中经常用到的,将在后边的笔记详细介绍。 (3)映射 映射与集或列表有明显区别,映射中每个项都是成对的。映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了 对象在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的。 关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生一个被称作散列码(hash code)的整数值, 散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。理想情况 下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。

集合类简介

java.util中共有13个类可用于管理集合对象,它们支持集、列表或映射等集合,以下是这些类的简单介绍 集: HashSet: 使用HashMap的一个集的实现。虽然集定义成无序,但必须存在某种方法能相当高效地找到一个对象。使用一个HashMap对象实现集的存储和检索操作是在固定时间内实现的. TreeSet: 在集中以升序对对象排序的集的实现。这意味着从一个TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用 了一个TreeMap. 列表: Vector: 实现一个类似数组一样的表,自动增加容量来容纳你所需的元素。使用下标存储和检索对象就象在一个标准的数组中一样 。你也可以用一个迭代器从一个Vector中检索对象。Vector是唯一的同步容器类??当两个或多个线程同时访问时也是性能良好的。 Stack: 这个类从Vector派生而来,并且增加了方法实现栈??一种后进先出的存储结构。 LinkedList: 实现一个链表。由这个类定义的链表也可以像栈或队列一样被使用。 ArrayList: 实现一个数组,它的规模可变并且能像链表一样被访问。它提供的功能类似Vector类但不同步。 映射: HashTable: 实现一个映象,所有的键必须非空。为了能高效的.工作,定义键的类必须实现hashcode()方法和equal()方法。这个类 是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。 HashMap: 实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。 WeakHashMap: 实现这样一个映象:通常如果一个键对一个对象而言不再被引用,键/对象对将被舍弃。这与HashMap形成对照,映象 中的键维持键/对象对的生命周期,尽管使用映象的程序不再有对键的引用,并且因此不能检索对象。 TreeMap: 实现这样一个映象,对象是按键升序排列的。 Set和List都是由公共接口Collection扩展而来,所以它们都可以使用一个类型为Collection的变量来引用。这就意味着任何列表或集构成的集合都可以用这种方式引用,只有映射类除外(但也不是完全排除在外,因为可以从映射获得一个列表。)所以说,把一个 列表或集传递给方法的标准途径是使用Collection类型的参数。 Vector 还是ArrayList,哪一个更好,为什么? 要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望能够获得 一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑的因素: (1)API (2)同步处理 (3)数据增长性 (4)使用模式 下面针对这4个方面进行一一探讨

API

在由Ken Arnold等编著的《Java Programming Language》(Addison-Wesley, June 2000)一书中有这样的描述,Vector类似于 ArrayList.。所有从API的角度来看这两个类非常相似。但他们之间也还是有一些主要的区别的。 同步性 Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。 数据增长 从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素 的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector 有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

相关推荐

暑期大学生实践心得

实践心得
20xx年暑假,我在学院的大力倡导下走出象牙塔般悠闲舒适的生活,进行暑期社会实践,带着一份中国共产党预备党员的责任感和使命感深人基层、深人群众、深人实际,充分展现我们当代大学生的思想、热情和行动,在实
展开详情

国庆节学生安全责任书范文

知识分享
尊敬的学生家长:根据上级教育主管部门的部署安排,20xx年国庆节假期定于10月1日——10月8日,10月9日开学。假期中,我们把孩子完全交给你们。根据《中华人民共和国义务教育法》、《中华人民共和国未成
展开详情

药店实习工作日记

实习专题
今天陈药师让我去做收银,我一开始还很犹豫因为我从来没有做过收银,也许陈药师是看出了我的担心,所以拍了拍我的肩膀说:不要着急慢慢来就好。我一开始先是将钱柜整理一遍,清点里面有多少钱在做好记录。虽然今天是
展开详情

2022高二作文距离话题议论文

高二语文
最遥远的距离其实是来源于我们心灵的狭隘。你的心缩得越紧,就越没有自由的空间,也越发觉得一切都太生疏,太深不可测了。于是,孤独诱使你走进它的“无底洞”。有的时候,只要我们把心摊开,一切似乎就在我们身边。
展开详情

乡下人家教案设计(热门6篇)

教案
乡下人家教案设计(1)学习目标1、认识5个生字,学会14个生字,正确读写带有生字的词语,并掌握多音字“冠”“率”。2、有感情地朗读课文,背诵自己喜欢的段落摘录积累好词佳句。3、学习作者通过描写乡下人家
展开详情

关于成功的名人名言

名人名言
1、一旦你产生了一个简单的坚定的想法,只要你不停地重复它,终会使之成为现实。提练、坚持、重复,这是你成功的法宝;持之以恒,最终会达到临界值。——杰克·韦尔奇2、当机会呈现在眼前时,若能牢牢掌握,十之八
展开详情

飞向蓝天的恐龙读后感

四年级语文
今天我预习了第31课《飞向蓝天的恐龙》,这篇课文主要讲了:说到恐龙,人们往往会想到聪明、凶猛、笨重、迟钝的龙。说到小鸟,我们就会想到灵活、五颜六色的小鸟孔雀。虽然二者不相关,但恐龙和鸟类在骨骼结构上有
展开详情

五年级语文期末复习学习方法

五年级语文
环节1:生字!生字!还是生字!建议家长坚持每天给孩子听写生字,并且出简单的看拼音写汉字的小卷子。听写生字是有学问的——不能上来就听写,要给孩子一个“预热”的过程。比如今天准备听写十个词,就应该先让孩子
展开详情

高三高考前如何根据自己平时成绩挖掘潜力

备考资料
其中重点是强化思维,挖掘潜能这块,是目前阶段能够确保提升的法宝。因为知识体系基本已经成型,但是大家做题存在的问题是大部分知道知识点,却做不出来,是因为题目讲究的是思维体系,就是你是怎么想的。大家平时大
展开详情

小学查理九世读书心得范文300字

四年级语文
书是什么,是一杯好茶,让我们去细心品尝;书是什么,是一把钥匙,为我们打开智慧宝库的大门;书是什么,是一位好朋友,为我们排忧解难;书是什么,是一叶小舟,乘我们在知识的海洋里翱翔。最近,班里十分流行一本书
展开详情
热点文档
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
数学教学反思范文(汇总18篇) 背影读后感800字优秀范文 《铁道游击队》读书笔记 巴西教案(优选4篇) 龟兔赛跑的故事新(精选3篇) 冲刺高考励志文章 朝花夕拾读书笔记 阿拉丁神灯故事(汇总7篇) 高二语文如何区分借喻与借代 劳动实践活动的心得体会 青年大学习第十二季第九期答案 绿野仙踪读后感550字精彩作文 优秀大学生事迹材料 小小的船教案设计(通用18篇) 我的父亲600字精彩作文 大学应届计算机专业毕业生自我评价 校长先进事迹材料 中华上下五千年读后感700字范文 情书句子大全(集锦3篇) 日月潭的传说教学反思(合集12篇) 揠苗助长教案(汇编19篇) 如何辅导高中语文作文 环保教育主题班会教案(推荐19篇) 新时代好少年孝老爱亲事迹材料 我的阅读时光600字精彩作文 语文古诗词大全(热门10篇) 人教版七年级历史知识点 2022年淘气包马小跳读书心得体会300字 幼儿园消防安全知识 感恩节快乐作文 水浒传200字读书笔记 最新创意的表白短信 高考政治大题答题模板总结 食物中毒教案(精编6篇) 一朵美丽的浪花500字小学作文 母爱无限为题的初中精彩作文 数学教学心得体会(精选19篇) 考试_500字_小学作文 《一年级的小豆豆》读后感 小学三年级语文学习方法指导 二年级数学的知识点整理 名人传读书笔记 关于童年读书笔记 环保话题作文600字(推荐20篇) 赶花会音乐教案(优选5篇) 时代广场的蟋蟀读书心得感悟 读学弈有感500字优秀范文 《辣椒》阅读答案(集合15篇) 富兰克林自传读后感心得体会 一年级语文知识点梳理下册 小学生假期家务劳动实践心得体会 幼儿园优秀教师先进事迹材料 作文母亲的叨唠范文 最美的是诚信500字七年级精彩作文 韵律操教学反思(实用7篇) 藏羚羊的跪拜读后感范文 高一英语作文关于网课 关于初一的写景作文 边城读后感800字高二 焚风的阅读题答案 肯德基社会实践心得体会 声母f的教案(热门17篇) 语文《动物游戏之谜》教案大全 人教版小学五年级语文上册每一篇课文的基础知识 手抄报 兴成语(热门3篇) 不变的是那份痴迷中考满分作文 个人年度读书计划 高中数学常见的误区及快速提高成绩策略 女朋友睡觉前小故事(优质8篇) 先进事迹材料 暑假实践心得800字 五一劳动节演讲稿精彩范文(一) 有的人读后感 植物新生命的开始教学反思(必备6篇) 四年级写景作文怎么写 小升初考试必备200道文学常识题 贴对联怎么贴(集锦7篇) 高二生物知识点细胞的基本结构 高中历史的知识点总结 2022中考决心书,自强不息,敢于拼搏;永不言弃 中国古代寓言故事则(汇编5篇) 二次函数a的知识点(通用8篇) 教师节的慰问 寒假读《草房子》有感范文 失乐园读后感范文500字 丰富多彩的课间活动 绿野仙踪读书心得 孩子升学祝福语简短独特(汇总4篇) 初一语文知识点总结大全 小学学生英语学习技巧及方法总结 中考语文阅读专项训练—第 实习生辞职信优秀参考例文(汇总5篇) 期末考试四年级作文 六年级应用题及答案 英国剑桥大学学费 高三英语满分作文模板 雨后彩虹500字初中作文 真正的朋友550字六年级作文 期中考试五年级作文 秦始皇历史故事(集合7篇) 给自己打气的句子(精品4篇) 土木工程专业认识实习报告范文 春天举行音乐会教学反思(集锦15篇) 玩泥巴教案(汇总17篇) 大学生家教实践心得体会 小学期中考试作文 小学六年级《假如给我三天光明》读书笔记 《你是我的宝贝》读书笔记 高效数学学习方法 有关大学生社会实践心得体会 充满能量励志名言 优秀教师先进事迹材料 建筑设计的实习小结 校园安全教育教案(优质19篇) 年级物理知识点(精品16篇) 寒假读《将心比心》有感 放寒假作文600字(汇编5篇) 校本课程教学计划(甄选16篇) 最好的句子(热门16篇) 走在花季500字初中作文 爱迪生救妈妈读后感 描写夕阳诗句(精选5篇) 支教实践心得 军训口号霸气押韵四班 必备暑假社会实践心得体会 竹的成语(合集6篇) 提高数学成绩的技巧 国庆节诗歌 六年级作文《有意义的课堂》 关于学校对教师的评语 大学英语作文 我的遗憾作文初中范文 拉萨古城教学设计(集合8篇) 省级优秀毕业生事迹材料 家庭教育心得体会范文 我爱祖国教案(优选10篇) 换牙我不怕教案(汇编4篇) 爱的无力阅读答案 关于勤奋的名言名句(集合5篇) 高三写景作文1000字 母亲节的故事(精选18篇) 关于幸福的句子经典(优质7篇) 高考临考前复习安排的技巧 诗歌朗诵企业(合集6篇) 医学检验专业大学生求职信 关于农事的谚语(推荐14篇) 故事湖南(通用9篇) 小学五年级关于珍惜时间作文 简爱读书笔记 一年级英语语法知识总结 利用三角形全等测距离教学反思(推荐3篇) 高二政治必修四知识点梳理 预防传染病安全教育教案(集锦7篇) 如何引导一年级孩子写好日记? 合作经验分享范文 吃饭教案(通用20篇) 考试之后作文 小学一年级英语自然拼读法基本规则和小窍门 关于大学语文试题及答案 实用的期中考试后作文300字 语文六年级知识点 暑期实践活动心得体会 陶罐和铁罐课件(集合3篇) 高中化学教师工作总结 得道多助失道寡助阅读答案(推荐18篇) 数控军训班级口号 生活在幸福中500字小学作文 小学语文如何复习的方法 怎样制定学习计划(热门17篇) 动物的脸教学反思(汇总11篇) 高考政治知识点整理 五年级语文第五单元复习题 人教版高二化学重难点 8中华少年教学设计(合集19篇) 千脚蛇 新学期语文学习方法 新航路开辟教案(实用8篇) 三字经读书笔记 UI设计教案(精编7篇) 我认识您了教案(集锦3篇) 观察描述矿物教学反思(集锦3篇) 书法诗词(通用8篇) 高一物理知识点整理归纳 2009经典教师节祝福语! 大学英语作文 安全知识作文 小学教师先进事迹材料 生活需要仪式感作文优秀议论文 2020大学生寒假社会实践心得体会范文 《在人间》读书笔记 暑期实践心得 一年级语文学习知识点 高一地理复习提纲必修二 大学军训体验感悟感言 母爱的名言 社会实践心得体会 消防安全知识培训主持稿 2022在职人员入党申请书1000字 师范生教育见习心得范文