Collection集合入门
发布日期:2021-07-22 10:54:15 浏览次数:6 分类:技术文章

本文共 6208 字,大约阅读时间需要 20 分钟。

集合

集合的概念:

集合和数组类似,是一个数组容器,用来存储引用数据类型的数据,在Java中,集合不是泛指某一个类,而是若干个类组成的数据结构的实现

Java的集合类是Java.util包中的重要内容,它允许以各种方式将元素进行分组,并定义了各种使这些元素更容易操作的方法

Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供使用

java集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适用不同的场合,用来解决一些实际的问题

集合的特点:

1.集合类这种框架是高性能的,对基本类集(动态数组,链接表,树和散列)的实现是高效率的

2.集合类允许不同类型的集合以相同的方式和高度互操作方式工作

3.集合类容易扩展和修改,程序员可以很容易的稍加更改就能满足自己的数据结构需求

集合与数组的区别:

1.存储的数据类型:

1.1数组可以存储基本数据类型的数据,也可以存储引用数据类型的数据

1.2集合中只能存储引用数据类型的数据,基本数据类型的数据需要进行装箱处理。才能存入到集合中

2.长度:

2.1数组是定长的容器,一旦实例化完成,数组的长度不能发生改变,即数组不能动态的添加,删除元素

2.2集合是变长的容器,长度可以发生改变,即集合中可以随时添加,删除元素

3.元素操作

3.1数组只能通过下标进行元素的访问,如果需要其他的操作,例如排序,需要自己写算法实现

3.2集合中封装了若干对元素进行操作的方法,直接使用集合,比较方便

使用集合的好处:

1.降低编程的难度

2.提供程序的运行速度和质量

3.无需学习新的API

4.增加代码的重用性

Java中的集合框架图

Java中的集合大体分为两类,分别是Collection集合和Map集合

其中,Collection是单列集合的顶级接口,Map接口是双列集合的顶级接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rqYwINun-1622257558896)(C:\Users\16326\Desktop\dayHomework\数据结构\QQ截图20210528174524.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pec3ZkJ0-1622257558897)(C:\Users\16326\Desktop\dayHomework\数据结构\QQ截图20210528174536.png)]

Collection集合

存储特点:

Collection接口是单列集合的顶级接口,在这种集合中存储的数据只占一列,所有的元素,直接存储于各种数据结构中

Collection集合中没有下标的概念

Collection API

接口方法:

由于这个接口是单列集合的顶级接口,在这里定义的所有方法,在所有的实现类中都是可以使用的

修饰 方法 描述
Boolean add(E element) 将一个指定类型的元素放到集合的末尾
Boolean addAll(Collection coll) 批量添加,将一个集合中的所有元素添加到当前集合的末尾
boolean remove(E element) 删除集合中指定的元素
boolean removeAll(Collection coll) 删除集合中所有的在参数集合中存在的交集
void clear() 清空集合中的所有的数据
boolean removeIf(Predicate predlicat e) 删除集合中满足指定条件的数据
boolean contains(E element) 判断集合中,是否包含指定的元素
boolean containsAll(Collection coll) 判断参数集合中,是否包含所有的元素都包含在当前的集合中
int size() 获取集合中元素的数量,类似于数组length
boolean isEmpty() 判断一个集合是不是空集合
Object[] toArray() 将集合中的元素转成Object数组
T[] toArray(T[] array) 将集合中的元素转成指定类型的数组

collection集合遍历

迭代器(iterator)

工作原理:

1.使用集合的iterator()方法,获取到了一个迭代器对象原因:迭代器在对集合进行遍历时,要与对应的集合产生关系,通过集合的一个方法获取迭代器对象,可以在方法内部创建迭代器对象,同时自动与当前集合产生关系,对于使用者而言,简化了代码2.这个迭代器对象,内部维护了一个引用,指向集合中的某一个元素,默认指向-1位3.使用next()方法,向后移动一位元素指向,并返回新的指向的元素4.如果使用next()方法,会向后移动一位元素指向的时候,已经超过了集合的范围,指向了一个不存在的元素,会抛出NOSuchElementException5.一般情况下,配合hasNext()方法一起使用
package bk.javase.p528;import java.util.Collection;import java.util.Iterator;public class demo10 {
public static void main(String[] args){
} private static void enumunation2(Collection
collection){
//1.创建一个迭代器对象 Iterator
iterator = collection.iterator(); //2.通过hasNext判断是否还有下一个元素 while(iterator.hasNext()){
//3.向后指向,并返回这个新的指向的元素 String element = iterator.next(); System.out.println(element); } //遍历取值,通过hasNext()判断是否还有下一个元素 while(iterator.hasNext()){
Object o = iterator.next(); //注意点:当集合中同时存在不同的类型的数据时,需要进行容错处理和向下转型 //容错处理 if (!(o instanceof String )){
throw new ClassCastException("类型错误"); } //向下转型 String s = (String)o; System.out.println(s.length()); } //再继续遍历 //注意点:直接再次使用第一次的iterator进行遍历,遍历失败,因为当前的指针已经指向了集合的最后 //再次使用hasNext()会返回false,所以如果想再次遍历,需要重新获取迭代器对象 while(iterator.hasNext()){
} }}

增强for循环

//遍历参数集合中的元素public static void enumration(Collection
collection){
//增强for循环 for(String str : collection){
System.out.println(str); }}

注意事项:

在使用增强for循环进行元素的遍历的过程中,不要修改集合中的内容!!!否则会出现ConcurrenModificationException

原因:增强for循环内部实际是一个迭代器

foreach:java8之后在Collection集合中添加了一个新的方法

list集合

存储特点:

1.list集合是单列集合,是Collection接口的子接口。Collection接口中的所有方法这里都有,同时这个集合比Collection集合多若干的方法

2.在list接口中,是有下标的概念的,多出来的这些方法,基本上也都是围绕着下标进行操作的

list和set对比:

1.list:存储的数据是有序的(元素的存储顺序与添加元素的顺序是一致的),可以重复

2.set:存储的数据是无序的,不可以重复

LIst API

返回值 方法 描述
void add(int index,E element) 向集合中的指定的下标位插入一个新的元素
void addAll(int index,Collection coll) 在集合中指定的下标插入另外一个集合中所有的的数据
E remove(int index) 删除集合中指定下标为的元素
E set(int index,E element) 修改指定下标为的值
E get(int index) 获取指定下标为的元素
int indexOf(E element) 获取集合指定元素第一次出现的下标
int lastIndexOf(E element) 获取集合指定元素最后一次出现的下标
List subList(int form,int to) 从一个集合中截取一部分作为子集合[from,to)
void sort(Comparator comparator) 将数组元素升序排序
package bk.javase.p528;import java.util.ArrayList;import java.util.List;public class demo11 {
public static void main(String[] args){
//1.实例化一个ArrayList对象,向上转型为接口类型 List
list = new ArrayList<>(); //2.新增元素 list.add("hello"); list.add("world"); list.add("hi"); list.add("everyone"); //3.在集合中指定下标添加元素 list.add(2,"chenheng"); //4.在集合中指定的下标位插入一个另一个集合中的所有数据 list.addAll(2,list); //5.删除集合中指定下标位的元素 //返回值:这个被删除的元素 System.out.println(list.remove(2)); //6.修改指定下标的值 //返回值被覆盖的值 System.out.println(list.set(2,"tianli")); //7.获取指定下标位的元素 System.out.println(list.get(2)); //8.获取集合中,某一元素第一次出现的下标 System.out.println(list.indexOf("hello")); //9.获取集合中某一元素最后一次出现的下标 System.out.println(list.lastIndexOf("world")); //10.从一个集合中截取一部分,作为子集合 List
sub = list.subList(2,60); System.out.println(list); System.out.println(sub); }}

List集合排序

在List接口中,提供了一个排序方法sort

方法逻辑:

这是一个系统封装好的一个专门用来排序的方法。由于集合中只能存储引用数据类型的数据,因此,需要明确两个元素的大小关系,参数Comparator是一个对象大小比较的接口。在这个接口的方法中,有两个参数,分别表示参与比较的对象,返回值是int类型的,不看具体的值,只看正负

/*>0 : o1 > o2<0 : o1 < o2=0 : o1 = o2*/int compare(T t1,T t2)

List集合遍历:

由于List接口继承自Collection接口,因此在Collection部分的三种遍历方式,都可以用来遍历List集合,同时,在List集合中,还添加了两种用来遍历集合的其他方式。

下标遍历法:

package bk.javase.p528;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class demo12 {
public static void main(String[] args){
//1.实例化一个List集合,存储若干数据 List
list = new ArrayList<>(); Collections.addAll(list,10,20,30,40,50); //2.遍历 index(list); } //下标遍历法 private static void index(List
list){
for (int i = 0;i < list.size();i++){
System.out.println(list.get(i)); } }}

();

Collections.addAll(list,10,20,30,40,50);
//2.遍历
index(list);

}//下标遍历法private static void index(List
list){ for (int i = 0;i < list.size();i++){ System.out.println(list.get(i)); }}

}

转载地址:https://blog.csdn.net/m0_56433040/article/details/117380431 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:字符串和正则表达式
下一篇:lambda表达式:

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月01日 15时02分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php foreach 数据库,php – 使用foreach将数据库检索的数据排列在HTML表中 2019-04-21
拉格朗日matlab编程例题,Matlab习题讲解.doc 2019-04-21
case是不是php语言关键字,PHP语言 switch 的一个注意点 2019-04-21
linux php mkdir失败,linux – mkdir错误:参数无效 2019-04-21
config.php渗透,phpMyAdmin 渗透利用总结 2019-04-21
java list 合并 重复的数据_Java ArrayList合并并删除重复数据3种方法 2019-04-21
android volley 上传图片 和参数,android - 使用android中的volley将图像上传到multipart中的服务器 - 堆栈内存溢出... 2019-04-21
android开发的取消清空按钮,Android开发实现带清空按钮的EditText示例 2019-04-21
android gp服务,ArcGIS Runtime SDK for Android开发之调用GP服务(异步调用) 2019-04-21
mysql整体会滚_滚mysql 2019-04-21
向mysql数据库中添加批量数据类型_使用JDBC在MySQL数据库中快速批量插入数据 2019-04-21
最全的mysql 5.7.13_最全的mysql 5.7.13 安装配置方法图文教程(linux) 强烈推荐! 2019-04-21
mssql连接mysql数据库文件_在本地 怎么远程连接MSSQL数据库 2019-04-21
mssql 远程无法连接mysql_解决SQLServer远程连接失败的问题 2019-04-21
linux mysql c++编程_Linux下进行MYSQL的C++编程起步手记 2019-04-21
Maria数据库怎么复制到mysql_MySQL、MariaDB数据库的AB复制配置过程 2019-04-21
mysql5.6 icp mrr bak_【mysql】关于ICP、MRR、BKA等特性 2019-04-21
mysql utf8跟utf8mb4_MySQL utf8 和 utf8mb4 的区别 2019-04-21
docker mysql开机自启动_Docker学习4-学会如何让容器开机自启服务【坑】 2019-04-21
在mysql中删除表正确的是什么_在MySQL中删除表的操作教程 2019-04-21