java集合总结_Java中集合总结
Java数组的长度是固定的,为了使程序能够方便地存储和操作数目不固定的一组数据,JDK类库提供了Java集合,这些集合类都位于java.util包中,但是与数组不同的是,集合中不能存放基本类型数据,而只能存放对象的引用。
Java集合主要分为以下三种类型:
Set(集):集合中的对象不按特定方式排序,且没有重复对象。它的有些实现类能对集合中的对象按照特地方式排序。
List(列表):集合中的对象按照索引位置排序,可以有重复对象,允许使用索引检索对象。
Map(映射):集合中的每一个元素都包含一对键对象和值对象(key-value),集合中的键对象是不能重复的,它的一些实现类能对集合中的键对象进行排序。
java主要集合类的类框图
(Interface与Interface之间为继承关系,是实线箭头,图中有误)。
Collection接口和Iterator接口
在Collection接口中声明了适用于Set和List的通用方法:
方法
描述
boolean add(Object o)
向集合中加入一个对象的引用
void clear()
删除集合内的所有对象,即不再持有这些对象的引用
boolean contains(Object o)
判断在集合中是否持有这些对象的引用
boolean isEmpty()
判断集合是否为空
Iterator iterator()
返回一个Iterator 对象,可用它来遍历集合中的元素
boolean remove(Object o)
从集合中删除一个对象的引用
int size()
返回集合中元素的数目
Object[] toArray()
返回一个数组,该数组包含集合中的所有元素
Iterator iterator()方法返回一个Iterator对象,Iterator对象采用了快速失败机制,例如,当通过Collection对象的iterator()方法得到一个Iterator对象后,紧接着利用ction集合的一些方法对集合进行了修改操作,则接下来访问Iterator对象的next()方法会抛出ConcurrentModificationException运行时异常。
Iterator接口提供了遍历各种类型集合的统一接口。Iterator接口声明了如下方法:
方法
描述
hasNext()
判断集合中的元素是否遍历完毕,如果没有,则返回true
next()
返回下一个元素
remove()
从集合中删除上一个由next()方法返回的元素
Set(集)
Set是最简单的一种集合,集合中对象不按特定方式排序(没有索引),并且没有重复对象。Set主要有两个实现类:HashSet和TreeSet。HashSet类按照哈希算法来存取集合中的对象,当向集合中加入这个对象时,HahshSet会调用对象的hashCode()方法来获得哈希码,然后根据哈希码进一步计算出对象在集合中存放的位置,因此存取速度比较快。HashSet类还有一个子类LinkedHashSet类,它不仅实现了哈希算法,而且还实现了链表数据结构。链表数据结构能够提高插入和删除元素的性能。TreeSet类实现了SortSet接口,具有排序功能。
Set集合中存放的是对象的引用,且没有重复对象。下面这个例子:
以上程序的打印结果为2.因此Set集合的add()方法是以用equals方法来判断对象是否已经存在与集合之中的。equals与“==”的区别自行google。
TreeSet类实现了SortSet接口,具有排序功能。下面这个例子:
以上程序打印的结果为 1 2 3 4 。因此当向TreeSet集合中插入对象时,会把他插入到有序的对象序列中。TreeSet支持两种排序方式:自然排序和客户化排序。在默认情况下采用自然排序方式。
1、自然排序
JDk类库中已经实现了Comparable接口的一些类的排序方式如下表:
类
排序
Byte 、Double 、Float 、Interger 、Long 、Short
按数字大小排序
Character
按字符的Unicode值的数字大小排序
String
按字符串中字符的Unicode值排序
2、客户化排序
我们可以通过实现Comparator接口来自定义排序方式,其中Type为指定被比较对象的类型。Comparator接口中有个compare(Type x,Type y)方法,用于比较两个对象的大小,当返回值大于0.表示x大于y,反之亦然。下面这个例子:
首先要实现Comparator接口
然后就可以自动进行客户化排序了:
以上程序打印的结果如下:
List(列表)
List列表的主要特征是其元素以线性方式存储,集合中允许存放重复对象。List接口的主要实现类包括:
1、ArrayList:代表长度可变的数组。允许对元素进行快速的随机访问(即检索位于特定索引位置的元素),但是向ArrayList中插入与删除元素较慢。
2、LinkedList:在实现中采用了链表数据结构,对顺序访问进行了优化,向其中插入与删除元素较快,随机访问速度则较慢。LinkList单据具有addFirst()、addLast()、getFirst()、getLast()、removeFirst()、rmoveLast()方法。
我们可以通过get(int index)方法获取指定索引位置的对象。也可以通过获得Iterator对象对其进行遍历。
List只能对集合中的对象按照索引位置进行排序,如果希望按其他方式排序,可以借助Comparator接口和Collection类。Collection类是Java集合类库中的辅助类,它提供了操纵集合的各种静态方法,其中sort()方法用于对List中的对象进行排序:
1、sort(List list) :对List中对象进行自然排序。
2、sort(List list,Comparator comparator) :对List中对象进行客户化排序。
ListIterator接口
List的listIterator()方法返回的是ListIterator对象。ListIterator接口继承自Iterator接口,此外还专门提供了专门操纵列表的方法:
方法
描述
add()
向列表中插入一个元素
hasNext()
判断集合中的元素是否遍历完毕,如果没有,则返回true
hasPrevious()
判断集合中的元素是否有上一个元素,如果没有,则返回true
next()
返回下一个元素
previous()
返回上一个元素
比较Java数组和各种List的性能
通过测试得到的操作时间:
类型
Java数组
ArrayList
LinkedList
随机访问操作(get)
16
23
63
迭代操作(iterate)
31
47
33
插入操作(insert)
不适用
1610
31
删除操作(remove)
不适用
6625
16
从表中可以看出,对Java数组的随机访问和迭代具有最快的访问速度;对LinkedList的插入和删除操作具有最快的速度,对ArrayList的随机访问也具有较快的访问速度。
Map(映射)
Map(映射)是一种键对象和值对象进行映射的集合。利用put(Object key ,Object value)向Map集合中加入元素,因此必须提供一对键对象和值对象。利用get(Object key)从Map集合中检索元素,因此只要给出键对象,就会返回对应的值对象。
Map集合中的键对象不允许重复,重复后后一个值对象将会覆盖前一个的值对象。
Map.Entry表示Map中的一对键和值。Map的entrySet()方法返回一个Set集合,这个集合中存放了Map.Entry类型的元素。
Map有两种比较常用的实现:HashMap和TreeMap,HashMap有较好的存取性能。TreeMap实现了SortedMap接口,能对键对象进行排序,同样提供了自然排序和客户化排序两种方式。
新的遍历集合的方法:
除了用Iterator来遍历集合外,还可以用以下代码遍历集合:
集合实用类:Collections
该类提供了一系列操纵List类型集合的静态方法。
主要笔记来自《Java面向对象编程》
相关文章:

区块链基本解读
最近看着这个区块链,稍有新得,写下菜鸟自己的理解,希望大牛多多指点。 总体心得,如果互联网技术解决的是通讯问题的话,区块链技术解决的是信任问题。 下面举个日常例子:打赌 比如A和B赌石头是否为天然玉石&…

PDO防注入原理分析以及使用PDO的注意事项 (转)
我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下两个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特别注意什么? 一、为何要优先使用PDO? P…

LSGO软件技术团队招新 线下组队学习
团队招新 LSGO软件技术团队(Dreamtech算法组)成立于2010年09月,团队主要从事地理信息系统、管理信息系统、计算机视觉等领域的应用开发,团队同时具有培养学生的重要职能,毕业学生分布在IBM、百度、阿里、腾讯、京东、…

java spring 配置文件_[Java教程]Spring配置文件
[Java教程]Spring配置文件02016-03-19 00:00:08Spring配置文件是集成了Spring框架的项目的核心,引擎从哪里开始,中间都执行了哪些操作,小谈一下它的执行流程。容器先是加载web.接着是applicationContext.一种方法是加入ContextLoaderServlet这…
王子朝:一种高效且容错的方法用于协作车辆定位
王子朝是华北电力大学计算机系大四的学生,Dreamtech成员,参加了多期Dreamtech与Datawhale联合组织的组队学习活动,现保送西安电子科技大学深造。 这篇图文是他在线下组队学习时,为大家分享自己所看论文的总结。 希望参与我们组队…

python文件句柄_Python文件操作
classfile(object):def close(self): #real signature unknown; restored from __doc__关闭文件"""close() -> None or (perhaps) an integer. Close the file.Sets data attribute .closed to True. A closed file cannot be used forfurther I/O operation…

XML简单的增改删操作
XML文件的简单增改删,每一个都可以单独拿出来使用。 新创建XML文件,<?xmlversion"1.0"encoding"utf-8"?> <bookstore> <bookgenre"fantasy"ISBN"2-3631-4"> <title>Oberons Legacy&l…

javascript推荐书籍
WEB前端研发工程师,在国内算是一个朝阳职业,这个领域没有学校的正规教育,大多数人都是靠自己自学成才。本文主要介绍自己从事web开发以来(从大二至今)看过的书籍和自己的成长过程,目的是给想了解 JavaScript或者是刚接触JavaScrip…

【青少年编程竞赛交流】10月份微信图文索引
10月份微信图文索引 由于“组队学习”这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习,所以,我另外新建了这个微信公众号“青少年编程竞赛交流”,在这个公众号上分享有关青少年编程方面的知识。如果大家需要就关注这个…

java 简单万年历_JAVA实现的简单万年历代码
本文实例讲述了JAVA实现的简单万年历。分享给大家供大家参考,具体如下:import java.util.Scanner;public class PrintCalendar {public static void main(String[] args) {int years 0;int month 0;int days 0;boolean isRun false;//從控制台輸入年…

mongoDB 入门指南、示例
http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html mongoDB 入门指南、示例 上一篇:简单介绍mongoDB 一、准备工作 1、 下载mongoDB 下载地址:http://www.mongodb.org/downloads 选择合适你的版本 相关文档:http://www.mongodb.…

中国电子学会图形化四级编程题:成语接龙
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

sidecar学习
1、SideCar的出现 微服务的结构是细粒度的,由多个服务构成,支持不同的服务用不同的语言来编写,比如a服务用python,b服务用java,C服务用php等,我们称为异构语言,那么在利用zuul来代理访问服务的时…

java整数常量区_在Java中,我可以用二进制格式定义一个整数常量吗?
所以,随着Java SE 7的发布,二进制表示法是标准的。 如果你对二进制有一个很好的理解,语法是非常简单明了的。byte fourTimesThree 0b1100; byte data 0b0000110011; short number 0b111111111111111; int overflow 0b1010101010101010101…

[LeetCode 120] - 三角形(Triangle)
问题 给出一个三角形,找出从顶部至底部的最小路径和。每一步你只能移动到下一行的邻接数字。 例如,给出如下三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 从顶部至底部的最小路径和为11(即235111)。 注意: …

中国电子学会scratch等级考试四级编程题:找出出现次数最多的数字
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

人工智能 有信息搜索 (启发式)
一、最佳优先搜索 根据评价函数选择表现的最佳的节点进行扩展 最佳优先搜索 best-first-search 算法 不同的方法有不同的评价函数 启发函数,标记h(x) h(n)从节点n到目标的最低耗散估计值 启发函数是额外信息的一种最普通的形式 二、贪婪最佳优先搜索 最先扩展离目标…

java 排序算法 讲解_java实现排序算法之冒泡排序法详细讲解
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序。这…

24、线程控制
线程有一套完整的与其有关的函数库可供调用,它们中的绝大多数函数名都以pthread_开头。为了调用这些函数库,必须在程序中包含头文件pthread.h,并且在比那一程序时使用选项-lpthread来链接线程库。 1、线程标识 就像每个进程有一个进程ID一样,…

Datawhale组队学习周报(第038周)
本周报总结了从 11月01日至11月07日,Datawhale组队学习的运行情况,我们一直秉承“与学习者一起成长的理念”,希望这个活动能够让更多的学习者受益。 第 30 期组队学习一共 8 门开源课程,共组建了 8 个学习群,参与的学…

OpenGL概念辨析: 窗口,视口,裁剪区域
1.窗口:这就不用解释了吧 2.视口:就是窗口中用来显示图形的一块矩形区域,它可以和窗口等大,也可以比窗口大或者小。只有绘制在视口区域中的图形才能被显示,如果图形有一部分超出了视口区域,那么那一部分是看…

java源码推荐_基于java的推荐系统实现源代码
【实例简介】常用推荐算法java实现~涉及多种相似度计算,比如cosine相似度,欧氏距离等~(recommand algirithm )【实例截图】【核心代码】RecommendSystemJavaCode└── Recommend└── src├── collaborative│ ├── cache│ │ ├── FileS…

ref与out的区别
前一段时间老用ref与out 感觉他们的效果差不多,就去网上查了一下他们的区别,网上说的概念性的东西太多了,后来通过自己的摸索发现他们有一个规律 ref: 在引用方法之外必须赋初值 static void TestRefAndRef(){string s1"test";Test…

【组队学习】【31期】组队学习内容详情
第31期 Datawhale 组队学习活动马上就要开始啦! 本次组队学习的内容为: IOS开发基于Python的办公自动化吃瓜教程——西瓜书南瓜书LeetCode 刷题李宏毅机器学习(含深度学习)动手学数据分析SQL编程语言数据可视化(Matpl…

区块链到底是什么?
2019独角兽企业重金招聘Python工程师标准>>> 欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 翻译人:ArrayZoneYour,该成员来自云社区翻译社 原文链接:https://www.investinblockchain.com/what-exactly-is-…

java怎么返回xml_java – 如何从Web服务返回XML
这可能是疯狂/愚蠢/愚蠢/冗长的问题之一,因为我是网络服务的新手.我想写一个Web服务,它将以XML格式返回答案(我正在使用我的服务进行YUI自动完成).我正在使用Eclipse和Axis2并遵循http://www.softwareagility.gr/index.php?qnode/21我希望以下列格式回复代码元素的数量可能因响…

jsp路径问题
绝对路径:/StudentInfo/images/login.jpg 相对路径:images/login.jpg 路径前面的第一个/代表tomcate目录下面的webapps这个文件夹 jsp的Advanced模版。。。默认有一个基准路径,所有写的路径都会变成绝对路径。 测试的时候发现,在IE下面可以正…

写一篇C语言入门第一讲
嗨~大家好~ 我是小白,最近才使用这个博客,我是一个计算机系的学生,我会在这里发一些我给我们班其他同学讲C语言入门的博文,希望大家能共享这些资料,当然了,我也很希望大家给我提出好的意见或建议。&#x…
李嘉骐:03 PyTorch模块与基础实战
深入浅出Pytorch 03 PyTorch模块与基础实战 内容属性:深度学习(实践)专题航路开辟者:李嘉骐、牛志康、刘洋、陈安东领航员:叶志雄航海士:李嘉骐、牛志康、刘洋、陈安东开源内容:https://githu…