Java集合类

  • Collection接口
  • List接口
  • Set接口
  • Map接口
  • 泛型
  • Lambda表达式

集合概述

为了在程序中可以保存数目不确定的对象,Java提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变,这些类被统称为集合。集合类都位于java.util包中,使用时必须导包。

集合就是一个动态数组

集合按照其存储结构可以分为两大类,单列集合Collection和双列集合
Map,这两种集合的特点具体如下:
Collection: 单列集合类的根接口,用于存储一系列符合某种规则的
元素,它有两个重要的子接口,分别是List和Set。其中,List的特点是元
素有序、元素可重复Set的特点是元素无序,而且不可重复。List接口
的主要实现类有ArrayList和LinkedList, Set接口的主要实现类有
HashSet和TreeSet。 

Map:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射
关系的元素,每个元素都包含- -对键值,其中键值不可重复并且每个键
最多只能映射到一个值,在使用Map集合时可以通过指定的Key找到对应
的Value。例如,根据一个学生的学号 就可以找到对应的学生。Map接口
的主要实现类有HashMap和TreeMap。

所谓单列集合就是线性结构。双列就是非线性结构

单列:

 

双列:就是一个存储的是编号,另外一个存储的是值(一般适用的的是图形结构和树形结构)

 

 

 


关于Collection

Collection是所有单列集合的父接口,它定义了单列集合(List和Set)通用的一-些方法,"这些方法可用于.操作所有的单列集合。Collection接口的常用如下表。 

 

 关于List

List接口继承自Collection接口,(Collecion里面的方法都是可以用的)是单列集合的一个重要分支。List集 合允许出现重复的元素,所有的元素是以一-种线性方式进行存储的,在程序中可以通过索引|访问List集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

子接口自己的方法

 

 ArrayList

ArrayList是List接口的一个实现类,它是程序中最常见的一种集合。在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。序,即元素的存入顺序和取出顺序一致。

ArrayList集合中大部分方法都是从父类Collection和List继承过来的,其中add()方法和get()
方法分别用于实现元素的存入和取出。接下来通过一个案例学习ArrayList集合的元素存取。


例如:

我们创建一个学生类和一个程序类(里面要有一个To String方法)

然后在新建一个Test类,首先我们创建一个线性表

 

 要将学生和程序员放到线性表中,先创建好程序员和学生

这里都是无参的,我们可以创建有参的

 然后List.add就可以将它们都放在线性表中

这就是添加数据

添加好了之后,如果想查看就可以直接输出List

我们现在试试加上数据

比如说我前面两个添加的是程序员,当我们想将学生放在第一个的是时候就选择这个

 

 但是这个要传进两个值,第一个就是你想放在第几个的下标。第二个就是将放在哪一个的对象放进去

 最后输出的时候我们就可以使用增强for循环

 运行结果如下图(就会发现学生在第一个)

 如果我们将学生删除掉,我们就如下图所示的进行修改

 

 如果要以表格的样子进行输出

结果如下图

 


 关于修改数据

当们想将数据2变成数据三

选择这个

 接下来传进去1和programmer2

 运行结果如下图所示

 


查询数据 

运行结果

 


删除数据

 

运行结果

 


清除所有的数据

 


非线性结构 

 LinkedList集合

ArrayList集合在查询元素时速度很快,但在增删元素时效率较低。为了克服这种局限性,可以使用List接口的另一个实现类LinkedList。LinkedList集合内部维护了一一个双向循环链表,链表中的每一个元素都使用弓|用的方式来记住它的前一个元素和后-个元素,从而可以将所有的元素彼此连接起来。当插入一个新元素时,只需要修改元素之间的这种弓|用关系即可,删除一个节 点也是如此。正因为这样的存储结构,所以LinkedList集合对于元素的增删操作具有很高的效率。

 

 

 

这个的使用也是非常的简单,就是在我们刚刚的基础上面 稍作修改

首先我们进行创建一个链表

 我们想将最后一个数据添加到第一个

这个时候就选择add.Frist,就可放在头部

 

 刚刚是通过增强for循环来进行遍历

也可以用普通for循环来进行遍历。当i=0就是第一个元素.......

增强for循环

 

 

 运行结果

 


除了增强for循环和普通for循环之外我们还可以使用接口

lterator接口

在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,Java专门提供了一个接口
Iterator。Iterator接口也是集合中的一员,但它与Collection、Map接口有所不同。Collection
接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历) Collection中的元素,因此Iterator对象也被称为迭代器。 

例如

 

 


Set接口

Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。Set接口主要有两个实现类,分别是HashSet和TreeSet。 其中,HashSet是根据对象的哈希值来确定元素在集合中的存储位置,具有良好的存取和查找性能。TreeSet则是以二叉 树的方式来存储元素,它可以实现对集合中的元素进行排序。 

 例如:

我们创捷一个HashSet

咱们现在是按照顺序进行添加,但是输出结果就会发现是随机输出的

运行结果

如果想添加顺序和输出的顺序一样

我们就使用它的子类LinkHashSet,这样添加的数顺序就和输出的顺序是一样的

 


 关于TreeSet例子

 然后上面有很多的警告

我们点击警告的第一个,添加Object,这样警告就都没有了

 运行结果:(顺序有序,自动排序)

当换成了字符,虽然没有报错

 

运行结果

 

 但是如果是同种比较就没问题


Map接口 

 Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一-种对应关系, 称为映射。从Map集合中访问元素时,只要指定了Key,就能找到对应的Value。

常用方法

 


HashMap

HashMap集合是Map接口的一个实现类,用于存储键值映射关系,但HashMap集合没有重复的键并且键值无序。接下来通过一个案例学习HashMap的用法。 

 

如何遍历

遍历的总套路 

 这种遍历是和我们添加的顺序不一样

可以使用子类LinkedHashMap

 


关于TreeMap

 

 运行结果:(会根据key的大小进行排序,如果有一样的就会只出现一个)

所以key唯一

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值