当前位置: 首页 > 编程日记 > 正文

java集合总结_Java中集合总结

Java数组的长度是固定的,为了使程序能够方便地存储和操作数目不固定的一组数据,JDK类库提供了Java集合,这些集合类都位于java.util包中,但是与数组不同的是,集合中不能存放基本类型数据,而只能存放对象的引用。

Java集合主要分为以下三种类型:

Set(集):集合中的对象不按特定方式排序,且没有重复对象。它的有些实现类能对集合中的对象按照特地方式排序。

List(列表):集合中的对象按照索引位置排序,可以有重复对象,允许使用索引检索对象。

Map(映射):集合中的每一个元素都包含一对键对象和值对象(key-value),集合中的键对象是不能重复的,它的一些实现类能对集合中的键对象进行排序。

java主要集合类的类框图

d2f96900ddb9c0998fd6b43afcde4481.png

(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集合中存放的是对象的引用,且没有重复对象。下面这个例子:

b435c4f5a58e5386dece94bf2e1b921e.png

以上程序的打印结果为2.因此Set集合的add()方法是以用equals方法来判断对象是否已经存在与集合之中的。equals与“==”的区别自行google。

TreeSet类实现了SortSet接口,具有排序功能。下面这个例子:

3d5091f813c2a72742036d3a6100e958.png

以上程序打印的结果为 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接口

c9cd36e600aaa10d065be3cdeba134d0.png

然后就可以自动进行客户化排序了:

3cd3500ecefa369bf61b056161b18190.png

以上程序打印的结果如下:

c2dd84ee9a0b28e3bdecdb8e63ff1700.png

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来遍历集合外,还可以用以下代码遍历集合:

40bf2d3a21de30f0d1c677b9de5a6954.png

集合实用类: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文件的简单增改删&#xff0c;每一个都可以单独拿出来使用。 新创建XML文件&#xff0c;<?xmlversion"1.0"encoding"utf-8"?> <bookstore> <bookgenre"fantasy"ISBN"2-3631-4"> <title>Oberons Legacy&l…

javascript推荐书籍

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

【青少年编程竞赛交流】10月份微信图文索引

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

java 简单万年历_JAVA实现的简单万年历代码

本文实例讲述了JAVA实现的简单万年历。分享给大家供大家参考&#xff0c;具体如下&#xff1a;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 入门指南、示例 上一篇&#xff1a;简单介绍mongoDB 一、准备工作 1、 下载mongoDB 下载地址&#xff1a;http://www.mongodb.org/downloads 选择合适你的版本 相关文档&#xff1a;http://www.mongodb.…

中国电子学会图形化四级编程题:成语接龙

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

sidecar学习

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

java整数常量区_在Java中,我可以用二进制格式定义一个整数常量吗?

所以&#xff0c;随着Java SE 7的发布&#xff0c;二进制表示法是标准的。 如果你对二进制有一个很好的理解&#xff0c;语法是非常简单明了的。byte fourTimesThree 0b1100; byte data 0b0000110011; short number 0b111111111111111; int overflow 0b1010101010101010101…

[LeetCode 120] - 三角形(Triangle)

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

中国电子学会scratch等级考试四级编程题:找出出现次数最多的数字

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

人工智能 有信息搜索 (启发式)

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

java 排序算法 讲解_java实现排序算法之冒泡排序法详细讲解

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

24、线程控制

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

Datawhale组队学习周报(第038周)

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

OpenGL概念辨析: 窗口,视口,裁剪区域

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

java源码推荐_基于java的推荐系统实现源代码

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

ref与out的区别

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

【组队学习】【31期】组队学习内容详情

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

区块链到底是什么?

2019独角兽企业重金招聘Python工程师标准>>> 欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 翻译人&#xff1a;ArrayZoneYour&#xff0c;该成员来自云社区翻译社 原文链接&#xff1a;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路径问题

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

写一篇C语言入门第一讲

嗨~大家好~ 我是小白&#xff0c;最近才使用这个博客&#xff0c;我是一个计算机系的学生&#xff0c;我会在这里发一些我给我们班其他同学讲C语言入门的博文&#xff0c;希望大家能共享这些资料&#xff0c;当然了&#xff0c;我也很希望大家给我提出好的意见或建议。&#x…

李嘉骐:03 PyTorch模块与基础实战

深入浅出Pytorch 03 PyTorch模块与基础实战 内容属性&#xff1a;深度学习&#xff08;实践&#xff09;专题航路开辟者&#xff1a;李嘉骐、牛志康、刘洋、陈安东领航员&#xff1a;叶志雄航海士&#xff1a;李嘉骐、牛志康、刘洋、陈安东开源内容&#xff1a;https://githu…