java collectiongroup 类_Java中的collection集合类型总结

java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。java集合工具包位置是java.util.*

java集合主要可以划分为4个部分:list列表、set集合、map映射、工具类(iterator迭代器、enumeration枚举类、arrays和collections)。

java集合工具包框架如下图。

29fb836d3292d19d843ab701a042a105.png

说明:看上面的框架图,先抓住它的主干,即collection和map。

collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。

collection包含了list和set两大分支。

(01) list是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是0。

list的实现类有linkedlist, arraylist, vector, stack。

(02) set是一个不允许有重复元素的集合。

set的实现类有hastset和treeset。hashset依赖于hashmap,它实际上是通过hashmap实现的;treeset依赖于treemap,它实际上是通过treemap实现的。

map是一个映射接口,即key-value键值对。map中的每一个元素包含“一个key”和“key对应的value”。

abstractmap是个抽象类,它实现了map接口中的大部分api。而hashmap,treemap,weakhashmap都是继承于abstractmap。

hashtable虽然继承于dictionary,但它实现了map接口。

接下来,再看iterator。它是遍历集合的工具,即我们通常通过iterator迭代器来遍历集合。我们说collection依赖于iterator,是因为collection的实现类都要实现iterator()函数,返回一个iterator对象。

listiterator是专门为遍历list而存在的。

再看enumeration,它是jdk 1.0引入的抽象类。作用和iterator一样,也是遍历集合;但是enumeration的功能要比iterator少。在上面的框图中,enumeration只能在hashtable, vector, stack中使用。

最后,看arrays和collections。它们是操作数组、集合的两个工具类。

有了上面的整体框架之后,我们接下来对每个类分别进行分析。

collection架构下面,我们将对collection进行概括。下面先看看collection的一些框架类的关系图:

3290194857e6ed73cff978714d1f3aaf.png

collection是一个接口,它主要的两个分支是:list 和 set。

list和set都是接口,它们继承于collection。list是有序的队列,list中可以有重复的元素;而set是数学概念中的集合,set中没有重复元素!

list和set都有它们各自的实现类。

为了方便实现,集合中定义了abstractcollection抽象类,它实现了collection中的绝大部分函数;这样,在collection的实现类中,我们就可以通过继承abstractcollection省去重复编码。abstractlist和abstractset都继承于abstractcollection,具体的list实现类继承于abstractlist,而set的实现类则继承于abstractset。

另外,collection中有一个iterator()函数,它的作用是返回一个iterator接口。通常,我们通过iterator迭代器来遍历集合。listiterator是list接口所特有的,在list接口中,通过listiterator()返回一个listiterator对象。

接下来,我们看看各个接口和抽象类的介绍;然后,再对实现类进行详细的了解。

1. collection简介collection的定义如下:

public interface collection extends iterable {}

它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等等。

collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:不带参数的构造函数 和 参数为collection的构造函数。带参数的构造函数,可以用来转换collection的类型。

// collection的api

abstract boolean add(e object)

abstract boolean addall(collection extends e> collection)

abstract void clear()

abstract boolean contains(object object)

abstract boolean containsall(collection> collection)

abstract boolean equals(object object)

abstract int hashcode()

abstract boolean isempty()

abstract iterator iterator()

abstract boolean remove(object object)

abstract boolean removeall(collection> collection)

abstract boolean retainall(collection> collection)

abstract int size()

abstract t[] toarray(t[] array)

abstract object[] toarray()

2. list简介list的定义如下:

public interface list extends collection {}

list是一个继承于collection的接口,即list是集合中的一种。list是有序的队列,list中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和set不同,list中允许有重复的元素。 list的官方介绍如下:

a list is a collection which maintains an ordering for its elements. every element in the list has an index. each element can thus be accessed by its index, with the first index being zero. normally, lists allow duplicate elements, as compared to sets, where elements have to be unique.

关于api方面。既然list是继承于collection接口,它自然就包含了collection中的全部函数接口;由于list是有序队列,它也额外的有自己的api接口。主要有“添加、删除、获取、修改指定位置的元素”、“获取list中的子队列”等。

// collection的api

abstract boolean add(e object)

abstract boolean addall(collection extends e> collection)

abstract void clear()

abstract boolean contains(object object)

abstract boolean containsall(collection> collection)

abstract boolean equals(object object)

abstract int hashcode()

abstract boolean isempty()

abstract iterator iterator()

abstract boolean remove(object object)

abstract boolean removeall(collection> collection)

abstract boolean retainall(collection> collection)

abstract int size()

abstract t[] toarray(t[] array)

abstract object[] toarray()

// 相比与collection,list新增的api:

abstract void add(int location, e object)

abstract boolean addall(int location, collection extends e> collection)

abstract e get(int location)

abstract int indexof(object object)

abstract int lastindexof(object object)

abstract listiterator listiterator(int location)

abstract listiterator listiterator()

abstract e remove(int location)

abstract e set(int location, e object)

abstract list sublist(int start, int end)

3. set简介set的定义如下:

public interface set extends collection {}

set是一个继承于collection的接口,即set也是集合中的一种。set是没有重复元素的集合。

关于api方面。set的api和collection完全一样。

// set的api

abstract boolean add(e object)

abstract boolean addall(collection extends e> collection)

abstract void clear()

abstract boolean contains(object object)

abstract boolean containsall(collection> collection)

abstract boolean equals(object object)

abstract int hashcode()

abstract boolean isempty()

abstract iterator iterator()

abstract boolean remove(object object)

abstract boolean removeall(collection> collection)

abstract boolean retainall(collection> collection)

abstract int size()

abstract t[] toarray(t[] array)

abstract object[] toarray()

4. abstractcollectionabstractcollection的定义如下:

public abstract class abstractcollection implements collection {}

abstractcollection是一个抽象类,它实现了collection中除iterator()和size()之外的函数。

abstractcollection的主要作用:它实现了collection接口中的大部分函数。从而方便其它类实现collection,比如arraylist、linkedlist等,它们这些类想要实现collection接口,通过继承abstractcollection就已经实现了大部分的接口了。

5. abstractlistabstractlist的定义如下:

public abstract class abstractlist extends abstractcollection implements list {}

abstractlist是一个继承于abstractcollection,并且实现list接口的抽象类。它实现了list中除size()、get(int location)之外的函数。

abstractlist的主要作用:它实现了list接口中的大部分函数。从而方便其它类继承list。

另外,和abstractcollection相比,abstractlist抽象类中,实现了iterator()接口。

6. abstractset

abstractset的定义如下:

public abstract class abstractset extends abstractcollection implements set {}

abstractset是一个继承于abstractcollection,并且实现set接口的抽象类。由于set接口和collection接口中的api完全一样,set也就没有自己单独的api。和abstractcollection一样,它实现了list中除iterator()和size()之外的函数。

abstractset的主要作用:它实现了set接口中的大部分函数。从而方便其它类实现set接口。

7. iteratoriterator的定义如下:

public interface iterator {}

iterator是一个接口,它是集合的迭代器。集合可以通过iterator去遍历集合中的元素。iterator提供的api接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。

注意:iterator遍历collection时,是fail-fast机制的。即,当某一个线程a通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程a访问集合时,就会抛出concurrentmodificationexception异常,产生fail-fast事件。关于fail-fast的详细内容,我们会在fail-fast总结后面专门进行说明。

// iterator的api

abstract boolean hasnext()

abstract e next()

abstract void remove()

8. listiteratorlistiterator的定义如下:

public interface listiterator extends iterator {}

listiterator是一个继承于iterator的接口,它是队列迭代器。专门用于便利list,能提供向前/向后遍历。相比于iterator,它新增了添加、是否存在上一个元素、获取上一个元素等等api接口。

// listiterator的api

// 继承于iterator的接口

abstract boolean hasnext()

abstract e next()

abstract void remove()

// 新增api接口

abstract void add(e object)

abstract boolean hasprevious()

abstract int nextindex()

abstract e previous()

abstract int previousindex()

abstract void set(e object)

希望与广大网友互动??

点此进行留言吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 鼠标点击图片放大,css3如何实现鼠标放上图片放大?(附代码)

在css3的学习中,我们会经常做一些小的动画效果,这感觉非常有趣,所以今天的这篇文章将给大家来介绍关于css3实现图片放大的一个效果,有兴趣的小伙伴可以看一下。我们都知道css3中增加了一个transform属性应用于元素的2D或3D转换&am…

脉位调制解调 matlab,通信原理与matlab仿真v2 第五章 DBPSK调制解调器(1)

在毕业设计的相关课程中,已经提及了这个DPSK调制方式。不过如果把它放在理论教学课程中来讲,就需要补充一些基本知识。当然还会给同学们看一下实际在卫星通信中使用的DBPSK程序。之前讲到了BPSK,回顾一下发送滤波器的知识吧。由于信号要在信道…

matlab地址数据类型uns,使用matlab生成sine波mif文件

使用matlab生成sine波mif文件作者:lee神在使用altera 的FPGA中的rom過程中常常會使用到.mif文件或.hex文件。對於初學者,無論mif還是hex都是很令人疑惑的東西,這里就對mif文件的格式及其創建做一點簡單的說明。Mif是memory initialization fi…

OpenAI科学家Hyung Won Chung演讲精华版

文章目录 第一个观点:涌现第二个观点:如何扩大规模1、标记化2、嵌入3、计算4、评估(损失函数)5、反向传播 最近从Google跳槽到OpenAI的AI科学家 Hyung Won Chung 比较拗口,我就简称尚哥了 他最近做了一个技术演讲 …

php如何实现购物时数量增减,1、vuex状态管理--购物车数量增减

GIF.gif1、购物车数量增减-import { mapState,mapMutations} from vuex //引入mapState、mapMutations映射函数export default{computed:{...mapState({changableNum:state > state.headerStatus.changableNum, //用模块headerStatus里的状态 changableNumdisabled:state &g…

oracle中存储过程和函数有什么区别,Oracle中存储过程和函数的区别

Oracle中存储过程和函数的区别存储过程和函数: www.2cto.com例子:[sql]//创建过程create or replace procedure add_emailinfo(namee email_info.fullname%type ,address email_info.email_address%type )isbegininsert into email_info(ful…

oracle 查询结果升序,Oracle学习日志-8(查询结果排序)

要用到的表如下书上写到,上面的查询结果排序是随机的,再执行几次结果可能不同,但是我执行多次后,查询结果的排序都是如此,是因为oracle的默认处理方式是按照物理储存顺序查询的,而我在插入记录的时候都是按…

linux下如何搜索某个文件,技术|如何在 Linux 中查找一个文件

对于新手而言,在 Linux 中使用命令行可能会非常不方便。没有图形界面,很难在不同文件夹间浏览,找到需要的文件。本篇教程中,我会展示如何在 Linux 中查找特定的文件。第一步要做的是find 命令,另外一种是使用 locate 命…

linux 安装系统 逻辑卷,Linux逻辑卷工具lvm的使用教程

创建逻辑卷(LVM)详细方法:STEP 1:首先用fdisk命令建立物理分区,然后将每个分区类型转换为LVM类型,编号为8e,如果是对整个磁盘建立pv的话这步可以忽略。STEP 2:使用pvcreate命令建立pv,也就是物理…

linux下su命令进不去,Linux系统中的切换用户Su命令,教你如何使用su命令,包括注意事项...

在本文中,我们将解释如何使用su命令,su(替换或切换用户的缩写)实用程序允许你使用其他用户的权限运行命令,默认情况下是root用户。使用su是在当前登录会话中切换到管理帐户的最简单方法,当root用户不允许通过ssh或使用GUI显示管理…

linux收回用户执行权限,Linux之文件权限管理命令

一、查看文件属性。1、命令ls -l filename 查看长格式形式查看文件详细属性。ls -l file1 ##查看文件file1的详细属性结果:- |rw-r--r--| 1 |kiosk| kiosk| 0| Jul 21 09:18 | file1[1] [2] [3] [4] [5] [6] [7] [8][1] 文件的类型—##空文件,或者文本d#…

linux服务器操作系统日志都有哪些,Linux操作系统服务器日志管理详解

Linux操作系统服务器日志管理详解Linux操作系统服务器日志管理详解日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有&#…

linux7配置dns服务器,centOS7搭建DNS服务器配置详解

写在前言:DNS服务器中 named-checkconf -z /etc/named.conf 命令用来检查所有与DNS有关的配置文件,若有错误,会直接提示,可以代替相关的所有检查命令。通过yum安装所需的BIND软件,系统光盘中自带了BIND服务的安装文件。…

linux重新安装xrog文件,Linux下重新生成xorg.conf

较新版本的Linux系统都已经没有xorg.conf文件,但是有时候为了对显示做微调或为了支持多屏显示等原因,还需要手工生成一个xorg.c较新版本的Linux系统都已经没有xorg.conf文件,但是有时候为了对显示做微调或为了支持多屏显示等原因,…

linux获取weblogic版本,LINUX查看JDK和Weblogic版本命令

满意答案xjiank2014.05.03采纳率:50% 等级:12已帮助:4893人JDKA、查找目前所使用的linux下所使用的jdk安装后的目录:echo $JAVA_HOME;B、获得目前所使用的linux下所使用的jdk的版本java -version;C、获得…

如何知道linux的ssh秘钥是否匹配,SSH密钥验证

[SSH登录两种方式验证](一):用户名密码验证 说明:1.客户机向服务器发送SSH连接请求2.服务器收到请求,发送一个公钥给客户机3.客户机收到公钥,对输入的用户名密码进行加密返回给服务器4.服务器收到加密信息利用私钥解密对比用户…

linux之父ted演讲视频观后感,ted演讲的观后感3篇

ted演讲的观后感3篇ted演讲的观后感篇一:《这一次是TED演唱,因为演讲真的很恐怖!》观后感 一个天生口吃的女孩,站在TED的讲台上,她要说她的故事,唱她的歌。这令我感触不少。先说一说,看完这场演讲,我脑中闪…

c语言程序设计电加热炉,基于80C52单片机的电加热数字恒温控制系统设计

1 控制方案设计温度场是一个梯度场,温度的上升或下降随时间缓慢变化。电加热炉温度控制过程可以用自然降温、程序升温和恒温保持3个分过程来描述。自然降温:停止加热,环境温度在整个过程中保持不变,受控温度场最终稳定为环境温度。…

6s在c语言中的用法,C语言中assert的用法讲解

assert是指编写代码时做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。下面是小编为大家整理的C语言assert的用法讲解,欢迎参考~assert宏的原型定义在中,其作用是如果它的条件返回错误&a…

cmd c语言 图形,CMD-C彩图隐写方案

1.前言本文提出了当前经典的彩图隐写方案,它具有聚类修改方向的特点,是第一个公认的彩色图隐写方案,为后续彩图隐写术和隐写分析工作提供了清晰的思路,具有深远的意义。2.背景现代灰度图像隐写方案是在最小化失真函数框架下设计的…