Collection集合入门
集合
集合的概念:
集合和数组类似,是一个数组容器,用来存储引用数据类型的数据,在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()方法,会向后移动一位元素指向的时候,已经超过了集合的范围,指向了一个不存在的元素,会抛出NOSuchElementException
5.一般情况下,配合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<String> collection){//1.创建一个迭代器对象Iterator<String> 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<String> 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<String> 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<String> 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<Integer> list = new ArrayList<>();Collections.addAll(list,10,20,30,40,50);//2.遍历index(list);}//下标遍历法private static void index(List<Integer> 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<Integer> list){for (int i = 0;i < list.size();i++){System.out.println(list.get(i));}
}
}
Collection集合入门相关推荐
- 3.1_12 JavaSE入门 P11 【集合】单例 Collection集合
相关链接 Excel目录 目录 P11 [集合]单例 Collection集合 1 集合的概述 1.1 为什么会出现集合类 1.2 集合类体系结构图 2 Collection集合 2.1 Collec ...
- java队列_java集合入门和深入学习(详解),看这篇就差不多了
一.集合入门总结 集合框架: Java中的集合框架大类可分为Collection和Map:两者的区别: 1.Collection是单列集合:Map是双列集合 2.Collection中只有Set系列要 ...
- java集合入门和深入学习,看这篇就差不多了
一.集合入门总结 集合框架: Java中的集合框架大类可分为Collection和Map:两者的区别: 1.Collection是单列集合:Map是双列集合 2.Collection中只有Set系列要 ...
- java集合入门和深入学习
一.集合入门总结 集合框架: Java中的集合框架大类可分为Collection和Map:两者的区别: 1.Collection是单列集合:Map是双列集合 2.Collection中只有Set系列要 ...
- Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)
文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...
- Collection集合List、Set
Collection集合,用来保存一组数据的数据结构. Collection是一个接口,定义了所有集合都应该包含的特征和行为 Collection派生出了两类集合 List和Set List接口:Li ...
- 5.Collection集合 List集合 泛型
一.Collection集合 1.1 数组和集合的区别 相同点:都是容器,可以存储多个数据. 不同点: 数组的长度是不可变的,集合的长度是可变的. 数组可以存基本数据类型和引用数据类型:集合只能存引用 ...
- plsql 循环存储过程返回数据集合_Java基础(十五)——Collection集合、泛型 - 寒江雨
Collection集合 集合概述 集合:集合是Java中提供的一种容器,可以用来存储多个数据 数组的长度是固定的,集合的长度是可变的 数组中存储的是同一种数据类型的元素,可以存储基本数据类型也可以存 ...
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin
1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...
最新文章
- 后bat时代,字节未来超越at也不是没可能
- 【linux+C】神器 vim + 指针相关客串
- iOS - 切换图片/clip subview/iCarousel
- 嵌入式Linux驱动程序
- 中石油训练赛 - High Load Database(二分+记忆化)
- c++的进制转换函数
- jquery ajax 跨域_Laravel 的跨域问题解决方案
- NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))...
- 人工智能入坑-机器学习-小目标
- 京东商城,超大型电商系统架构设计原则与实践!8页ppt详解
- EasyX实现按钮效果
- 为什么都建议程序员不要做“外包”?看完这些经历,很辛酸
- mysql 异常码1903_Mysql 异常。 寻求帮助
- 安卓中发短信的几种方式总结和实现
- ElementUI从PNG开始,自己添加ICON
- Unity3d之骨骼动画
- 项目经验:排队叫号系统(Python)
- html微信网页字体被放大问题
- 百度地图多个marker标点+点聚合
- 关于 Linux中逻辑卷/物理分区等知识的一些总结
热门文章
- java导出excel问题记录
- MYSQL多表联合查询排序
- 分立器件~二极管三极管
- ESP8266 复位 ets Jan 8 2013,rst cause:4, boot mode:(3,7)
- 我协会负责人调研东风汽车·····
- Playbook的写法讲解
- 猫眼电影票房爬取到MySQL中_爬虫之爬取猫眼电影专业版实时数据排行榜
- phpstorm文件的大纲里的m、f、fx是什么意思?
- 如何把生活过程升级打怪?
- G - Ugly Numbers