常用集合(List,Set,Map)的基本定义和操作

集合类存放于java.util包中。

集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。

常用的集合类型主要有3种:set(集)、list(列表)和map(映射)。

通俗的说,集合就是一个放数据的容器,准确的说是放数据对象引用的容器。

Collection 集合的根接口

------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。

---------| ArrayList  ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。

---------| LinkedList  LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。

---------| Vector(了解即可)  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。

------| Set  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。

----------| HashSet  底层是使用了哈希表来支持的,特点: 存取速度快.

----------| TreeSet   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。

------|Queue 队列接口集合类,是一种先进先出的数据结构,更新时使用术语“入队”“出队”用LinkedList实现接口

Map映射集合的根接口

------|HashMap 通过使用映射关系来到达存储数据,通过hashcode快速查找,具体特点:无序,速度快

------|TreeMap 映像树 ,基于红黑树实现,没有调优选项,处于平衡状态,具体特点:有序,速度慢

用法:

ArrayList:

定义:List<E> list=new ArrayList<E>();//构造一个空数组,默认容量为10

              ArrayList<E> list=new ArrayList<E>();//这两种定义方式一个是以List接口声明,( List为接口,ArrayList是List接口的实现类)另一个是以实现类ArrayList声明,两者相差不大,实现函数方法基本一样。(注:用List声明的数组中,像TrimToSize()没有,而用ArrayList声明里面可以使用,该方法用来删除预留元素的空间,这预留元素的空间并不是null而是每次ArrayList增长都会申请多一点空间,当size()=1000,ArrayList已经申请了1200空间,而该方法是删除多余的200空间,该方法用来内存紧张的时候使用),

       (尖括号里面的E是数据类型,比如:如果是String,则该数组里面只能存String类型的数据)

个人认为能用ArrayList声明尽量用ArrayList声明;

常用方法:

add(E e):                     在数组末尾添加元素

size():                           数组中实际元素个数,并不是数组容量

add(int index, E e):    在数组指定位置添加元素

clear():                         将数组中元素清空

contains(E e):             判断数组中是否含有某个元素

get(int index):             返回数组指定位置的元素

indexOf(E e):      返回数组指定元素第一次出现的位置

set(int index, E e):     替换数组指定位置的值

remove(int index):     移除数组指定位置的元素并返回删除的值

remove(E e):  移除数组中第一次出现的指定元素并返回true和false

addAll(Collection<? extends E> c):  在数组末尾添加另一个数组

addAll(int index, collection<? extends E> c):   在数组指定位置添加另一个数组

removeAll(Collection<?>c):   将数组中属于数组 c 中的元素全部删除

LinkedList:

定义:LinkedList<E> linkedlist=new LinkedList<E>();

LinkedList其实数据结构里面的双向链表,既然是链表,那么分配的存储空间并不是连续的,而是分散的,插入和删除操作很快,时间复杂度为O(1);但访问该数组时就比较慢了,必须从第一个元素开始找起,时间复杂度为O(n);

它包含了一个重要的内部类Node,Node是双向链表节点所对应的数据结构它包含的属性有,当前节点所包含的值,上一个节点及下一个节点。

LinkedList既可以作为先进先出的队列又可以作为后进先出的堆栈,并且提供了了丰富的方法

常用方法:

添加:

boolean add(E e):在链表后添加一个元素,如果成功,返回true,否则返回false;

addFirst(E e):在链表头部插入一个元素;

addLast(E e):在链表尾部添加一个元素;

add(int index, E element):在指定位置插入一个元素。

offer(E e);类似队列的插入方法

offerFirst(E e);在头部插入一个元素

offerLast(E e);在尾部插入一个元素

删除:

remove();移除链表中第一个元素;

boolean remove(Object o):移除链表中指定的元素;

remove(int index):移除链表中指定位置的元素;

removeFirst():移除链表中第一个元素,与remove类似;

removeLast():移除链表中最后一个元素;

boolean removeFirstOccurrence(Object o):移除链表中第一次出现所在位置的元素;

boolean removeLastOccurrence(Object o):移除链表中最后一次出现所在位置的元素;

获取元素:

get(int index):按照下边获取元素;

getFirst():获取第一个元素;

getLast():获取第二个元素;

以上为队列的先进先出的方法

下面的方法是堆栈的类似方法:

push(E e):与addFirst一样,实际上它就是addFirst;

pop():与removeFirst一样,实际上它就是removeFirst;

poll():查询并移除第一个元素;

peek():获取第一个元素,但是不移除;

peekFirst():获取第一个元素,但是不移除;

peekLast():获取最后一个元素,但是不移除;

比较特殊的方法:

getFirst();

getLast();

获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();

removeLast();

获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

在JDK1.6出现了替代方法。

offerFirst();

offerLast();

peekFirst();

peekLast();

获取元素,但不删除元素。如果集合中没有元素,会返回null。

pollFirst();

pollLast();

获取元素,但是元素被删除。如果集合中没有元素,会返回null。

遍历的方法:

(01) 第一种,通过迭代器遍历。即通过Iterator去遍历。

for(Iterator iter = list.iterator(); iter.hasNext();)

    iter.next();

(02) 通过快速随机访问遍历LinkedList

int size = list.size();

for (int i=0; i<size; i++) {

    list.get(i);       

}

(03) 通过另外一种for循环来遍历LinkedList

for (Integer integ:list)  ;

(04) 通过pollFirst()来遍历LinkedList

while(list.pollFirst() != null) ;

(05) 通过pollLast()来遍历LinkedList

while(list.pollLast() != null) ;

(06) 通过removeFirst()来遍历LinkedList

try {

    while(list.removeFirst() != null) ;

} catch (NoSuchElementException e) {

}

(07) 通过removeLast()来遍历LinkedList

try {

    while(list.removeLast() != null)  ;

} catch (NoSuchElementException e) {

}

(注:千万不要通过随机访问去遍历LinkedList,如果该数组很长所花费的时间也就会很长)

Vector:又称之为向量类,与ArrayList差不多,只不过Vector是线程安全,它里面的方法基本都是用synchronized修饰。

HashSet:

定义:HashSet<E> hashset=new HashSet<E>();

              或者Set<E> hashset=new HashSet<E>();

上面提到Set是无序,所以HashSet里面没有重复的数据,可以允许为null值,它是Set接口的一个实现类

如何添加同一个数据,HashSet会调用hashCode()用来判断是否相同,执行完HashCode后也会执行equals,如果两者都返回true,那么它就会认为这两者数据是一样的,就会停止添加,否则直接添加

如何重写了equals函数那么HashCode也必须重写,否则会出错

常用方法:

add(E e)     如果此 set 中尚未包含指定元素,则添加指定元素。

clear()     从此 set 中移除所有元素。

clone()       返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。contains(Object o)     如果此 set 包含指定元素,则返回 true。

isEmpty()    如果此 set 不包含任何元素,则返回 true。

iterator()    返回对此 set 中元素进行迭代的迭代器。

remove(Object o)   如果指定元素存在于此 set 中,则将其移除。

size()       返回此 set 中的元素的数量(set 的容量)。

TreeSet:

它是红黑树数据结构,他是是基于TreeMap实现

TreeSet是非同步的

TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。

HashMap:

通过键值对key-value的形式存值,有点类似于哈希表的链式存储方式,

允许用null作为key和value

这个实现的基本操作提供了稳定的性能(get和put)

Get(Object key)     //获取key对应的value值

Put(key,value)      //存值

HashMap不能直接遍历,必须通过KeySet()方法返回一个key的Set集合然后在通过遍历set来获取value的值

remove(Object key)    //如果存在的话,从这个映射中移除指定的键的映射。

Size()      //返回键值对的数目

 

 

以上为个人总结

 

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

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

相关文章

多麦克风做拾音的波束_麦克风丨人声应该用动圈话筒还是电容话筒?

无论是在您最喜欢的乐队的纪录片中&#xff0c;还是在电影中那些有关录音棚里的场景中&#xff0c;似乎都存在着一个共同的主题&#xff0c;那就是&#xff1a;歌手们都在使用大振膜的电容麦克风进行录音。我知道人们应该从别人的经验中汲取精华&#xff0c;事半功倍。但是我并…

MYSQL安装与库的基本操作

mysql数据库 什么是数据库 # 用来存储数据的仓库 # 数据库可以在硬盘及内存中存储数据 数据库与文件存储数据区别 数据库本质也是通过文件来存储数据, 数据库的概念就是系统的管理存储数据的文件 数据库介绍 数据库服务器端: 存放数据的主机集群数据库端: 可以连接数据库的任意…

java框架mybatis配置文件总结一

先新建个java EE的项目 该配置文件必须在src的目录下面&#xff0c; 新建一个xml 文件&#xff1a; 建完后发现它会自动建在web目录下面&#xff0c;我们把这个文件移到src目录下面&#xff1a; &#xff08;注&#xff1a;对了&#xff0c;该文件的编码最好用utf-8的no bom,…

python第六周实验_第六周实验四

二.实验的内容(1)根据下面的要求实现圆类Circle。1.圆类Circle的成员变量&#xff1a;radius表示圆的半径。2.圆类Circle的方法成员&#xff1a;Circle():构造方法&#xff0c;将半径置0Circle(double r)&#xff1a;构造方法&#xff0c;创建Circle对象时将半径初始化为rdoubl…

测试:脱离VS2010使用自动化测试时出现 6DA215C2-D80D-42F2-A514-B44A16DCBAAA 错误

在前一系列IronRuby中一直是围绕这UI自动化测试来写的&#xff0c;今天基本测试框架完成了&#xff0c;测试人员没有安装VS2010&#xff0c;不知道能否跑&#xff0c;所以就在测试人员机器上跑跑看&#xff0c;但是问题就出现了 现象 运行run.bat跑单元测试时&#xff0c;出现以…

Linux的远程连接及Linux系统下Tomcat部署

Linux的远程需要用的软件有Xshell&#xff0c;Xftp 本人使用VMware12Pro虚拟机&#xff0c;Linux系统为CentOS7&#xff0c;使用局域网进行远程连接 Xshell和Xftp没有安装的话可以取官网下载&#xff0c;但Xshell需要验证信息&#xff0c;所以也可以去360电脑软件下载 在VMw…

uniapp图标_uniapp扩展自定义uniIcon组件图标

1、访问Iconfont-阿里巴巴矢量图标库&#xff0c;下载自己想要的图片&#xff0c;下载svg格式备用2、通过百度字体编辑器打开本地最新的uni.ttf文件(http://fontstore.baidu.com/static/editor/index.html#)&#xff0c;打开之后可以看到所有的uni所有图标都在里面3、导入第一步…

asp.net面试集合

1 &#xff1a;维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑&#xff1f;为什么 答&#xff1a;尽可能用约束&#xff08;包括CHECK、主键、唯一键、外键、非空字段&#xff09;实现&#xff0c;这种方式的效率最好&#xff1b;其次用触发器&#xff0c;这种方…

Spring Boot 日志的使用及logback.xml的使用

当前是市场上使用的日志框架有很多&#xff0c;比如&#xff1a;JUL、JCL、Jboss-logging、logback、log4j、slf4j....等等&#xff1b; 但是日志主要分为两类&#xff0c;日志门面和日志实现两类&#xff1b;日志门面可以说是日志框架的抽象层&#xff0c;主要实现是的日志实…

基4fft算法的蝶形图_原地且自动整序的FFT算法

传统的计算快速傅里叶变换的Cooley-Tukey算法效率极高&#xff0c;因其主要由蝶形运算构成&#xff0c;所以代码形式也非常简单&#xff0c;只是需要将输入或者输出按照位反转的方式重新排序。这个重新排序的步骤并不是必须的。Clive Temperton于1991年在Self-Sorting In-Place…

嵌入式BootLoader技术内幕(二)

三、Boot Loader 的主要任务与典型结构框架 在继续本节的讨论之前&#xff0c;首先我们做一个假定&#xff0c;那就是&#xff1a;假定内核映像与根文件系统映像都被加载到 RAM 中运行。之所以提出这样一个假设前提是因为&#xff0c;在嵌入式系统中内核映像与根文件系统映像也…

MongoDB数据库的迁移

最近公司开始要换服务器啦&#xff0c;MongoDB上面的数据又得迁移&#xff0c;还是记录一下比较好。 1&#xff09;、将MongoDB的压缩包解压至相对应的路径(压缩文件在本地服务器的地址192.168.0.22的/opt/zip文件下面) 2&#xff09;、配置好mongodb.conf文件&#xff0c;配…

excel vba 如何将日期周几转换成文字_这5个超实用的Excel技巧,让你的办公效率更高...

导读&#xff1a;对于办公职员来说&#xff0c;Excel是几乎每天都会接触的办公软件。在Excel中&#xff0c;有非常多的小技巧&#xff0c;学习这些小技巧需要不断的积累和应用&#xff0c;今天指北针就来给大家分享5个超实用的Excel技巧&#xff0c;让办公变得更加有效率。文/芒…

VMware创建Linux及局域网内独立访问IP和访问外网IP的配置

好早之前有一篇是配置远程连接Linux和部署Tomcat的文章&#xff0c;但是并没有讲解如何配置IP的相关知识。最近公司在搞集群配置&#xff0c;我就先拿电脑上的VMware上的Linux做个测试&#xff0c;分享和总结一下经验吧&#xff0c;也算是为了补齐之前的那个空白&#xff01; …

每位设计师都应该拥有的50个CSS代码片段

每位设计师都应该拥有的50个CSS代码片段

C#浅拷贝与深拷贝区别

也许会有人这样解释C# 中浅拷贝与深拷贝区别&#xff1a; 浅拷贝是对引用类型拷贝地址&#xff0c;对值类型直接进行拷贝。 不能说它完全错误&#xff0c;但至少还不够严谨。比如&#xff1a;string 类型咋说&#xff1f; 其实&#xff0c;我们可以通过实践来寻找答案。 首先&a…

内网安装nginx+keepalived环境配置及简单使用

分享一下这次艰难的配置过程&#xff0c;衔接上一篇的配置内网独立IP虚拟机。 先吐槽一波&#xff0c;由于公司网络属于内网&#xff0c;与外网互不相通&#xff0c;所以在安装nginx的时候可能会去外网找相对应rpm文件&#xff0c;而且也有许多的版本不兼容问题&#xff0c;好…

cad连续标注数字123怎么弄_实例讲解CAD模型与布局中的各种比例

好课推荐&#xff1a;零基础CAD&#xff1a;点我CAD室内&#xff1a;点我 周站长CAD&#xff1a;点我CAD机械&#xff1a;点我 Bim教程&#xff1a;点我CAD建筑&#xff1a;点我CAD三维&#xff1a;点我全屋定制&#xff1a;点我 ps教程&#xff1a;点我苹果版CAD:点我 3dmax教…

SpringMvc异步请求的使用及部分原理

最近隔壁项目组的项目又出问题了&#xff0c;一直被用户投诉太卡了&#xff0c;页面白屏的那种&#xff0c;打开源代码一看&#xff0c;全是非异步请求&#xff0c;类似于以下写法&#xff1a; ResponseBodyRequestMapping(value "/getTest")public String getTest(…

Microsoft BizTalk ESB Toolkit 2.0

[>>> 更多<BizTalk开发系列>文章 ] 微软于6月8号发布了BizTalk Server 2009企业集成平台的最后一个功能组件:ESB Toolkit 2.0 (原名:ESB Guidance 2.0)&#xff0c;ESB ToolKit 2.0一个是工具和代码集扩展了BizTalk Server 2009对于松耦合和动态消息架构的支持…