linq判断集合中相同元素个数_JavaSe集合的概念以及集合框架介绍

a59aea929eca0a7406621e5c52869730.png

###集合

今天任务

1.概念1.1 集合的概念1.2 集合的框架结果介绍1.3 集合和数组的对比
2.Collection接口2.1 Collections中常用的方法
3.泛型3.1 什么是泛型3.2 泛型的声明3.3 说明3.4 泛型使用时的注意事项3.5 受限泛型3.6 泛型应用在集合上
4.Iterator迭代器4.1 迭代器的工作原理4.2 迭代器的使用
5.List接口5.1 List接口的存储特点5.2 List接口的实现类

教学目标

1.掌握集合的概念以及和数组的对比
2.了解集合的框架
3.了解Collection接口中的常用方法
4.了解泛型的使用及注意事项
5.掌握Iterator的工作原理以及使用
6.掌握List接口的存储特点
7.掌握ArrayList的使用
8.了解LinkedList、Vector和Stack的使用

第一节 概念

#####1.1 集合的概念

集合与数组一样,也是一个容器,与数组不同的是,集合的长度不定,可以无限的想集合中添加元素,而且集合中存储的元素类型可以随意

#####1.2 集合的框架结构介绍

Collection集合的框架结构

0e46bad281bb35b84583c524816481bb.png
Map集合的框架结构

ffbb60087c6bdd73119be244fb140c28.png

#####1.3 集合与数组的对比

相同点:

都是数据的容器,在一个数组或集合中可以声明(存储)多个数据

不同点:

元素:数组中的元素只能是相同(相兼容类型)集合中的元素是任意的(泛型)
​
数组中可以存储基本类型和引用类型,集合只能存储引用类型
​
长度(元素个数):数组是定长的,一旦初始化长度就不可以修改集合长度可以修改,可以删除元素和添加元素

####第二节 Collection接口

#####2.1 Collection中常用的方法

方法名描述add(E e)确保此 collection 包含指定的元素(可选操作)。addAll(Collection<? extends E> c)将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。clear()移除此 collection 中的所有元素(可选操作)。contains(Object o)如果此 collection 包含指定的元素,则返回true。containsAll(Collection<?> c)如果此 collection 包含指定 collection 中的所有元素,则返回 true。equals(Object o)比较此 collection 与指定对象是否相等。isEmpty()如果此 collection 不包含元素,则返回true。iterator()返回在此 collection 的元素上进行迭代的迭代器。remove(Object o)从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。removeAll(Collection<?> c)移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。retainAll(Collection<?> c)仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。size()返回此 collection 中的元素数。toArray()返回包含此 collection 中所有元素的数组。

####第三节 泛型

3.1 什么是泛型

泛型就是可以表示一个广泛数据类型的类型参数(泛型只能表示引用类型)
形式参数:声明方法时,在方法的参数列表中声明,而且在方法体中会使用到,但是是一个未知的数据
类型参数:在一个类中声明一个未知的数据类型,在类中可以使用这个类型,但是具体类型取决于实例化时传入的实际类型

3.2 泛型的声明

1)泛型可以声明在方法中:(泛型方法)
public static <标识符> void fun(){}
​
2)泛型可以声明在类中:(泛型类)
public class 类名<标识符>{//类体//泛型可以在类中充当成员变量//泛型可以再类中充当方法的返回值//泛型可以在类中充当方法的参数
}
​
3)泛型可以声明在接口中:(泛型接口)
public interface 接口名<标识符>{//成员//泛型可以充当接口中方法的返回值//泛型可以充当接口中方法的参数
}

3.3 说明

1)标识符:只要是一个合法的标识符即可,一般情况下,只使用一个大写字母表示泛型
例:public class Person<T>{}
2)泛型的类型与声明的类或接口不需要有任何的关系
3)泛型可以在类中充当任何的成员
4)泛型具体类型取决于实例化对象时传入的实际类型

3.4 泛型使用时的注意事项

1)泛型不能在类中声明静态常量属性
final修饰的属性必须在声明的同时初始化,所以泛型不能声明常量
static修饰的属性是静态属性,先于对象,泛型类型取决于创建对象时传入的实际类型,所以泛型不能声明静态属性
综上所述:不能使用泛型声明静态常量属性
​
2)泛型不能在类中初始化数组,但是可以声明数组
初始化数组时需要给元素进行分配空间,但是泛型类型不确定无法分配空间
​
3)在类中不能使用泛型声明参数个数相同的重载方法
当一个类中有两个泛型时,创建对象时,两个泛型使用相同类型替换,那么重载方法就是相同的方法(同名,参数列表也相同)
​
4)使用不同实际类型创建出的泛型类对象的引用不可以相互赋值

3.5 受限泛型

1)<? extends T>:表示T类或者T类的子类
2)<? super T>:表示T类或者T类的父类
3)<?>:表示任意类型

#####3.6 泛型应用在集合上

泛型在集合中应用,表示的是集合中元素的类型

####第四节 Iterator迭代器

#####4.1 迭代器的工作原理

迭代器相当于一个游标,最初获取迭代器时,迭代器的位置在所有元素的前面,每迭代一个元素,迭代器向后移动一个位置

a0e7b93cbee960e5bb987c3f9c8486d0.png

#####4.2 迭代器的使用

方法名描述hasNext()判断迭代器是否存在下一个元素可以迭代器next()迭代器迭代下一个元素remove()从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

####第五节 List接口

方法名描述add(int index, E element)在列表的指定位置插入指定元素(可选操作)。addAll(int index, Collection<? extends E> c)将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。containsAll(Collection<?> c)如果列表包含指定 collection 的所有元素,则返回true。get(int index)返回列表中指定位置的元素。indexOf(Object o)返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。lastIndexOf(Object o)返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。listIterator()返回此列表元素的列表迭代器(按适当顺序)。remove(int index)移除列表中指定位置的元素(可选操作)。set(int index, E element)用指定元素替换列表中指定位置的元素(可选操作)。subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。

#####5.1 List接口的存储特点

相对有序存储,可以存储相同元素(不排重),可以通过下标访问集合元素
List接口中可以使用独有的迭代器ListIterator,具有反向遍历的功能

#####5.2 List接口的实现类

5.2.1 ArrayList类

ArrayList类是List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。
​
存储特点:相对有序存储,可以存储相同元素(不排重),可以通过下标访问集合元素,通过数组实现的集合

代码实现:

public class ArrayListDemo {public static void main(String[] args) {//创建一个ArrayList集合ArrayList<String> list = new ArrayList<>();//构造方法中的泛型可以省略list.add("zhangsan");//向集合中添加元素list.add("lisi");list.add("wangwu");System.out.println(list.isEmpty());//判断list集合是否为空集合System.out.println(list.size());//查看集合中元素的个数System.out.println(list.get(1));//获取集合中下标为1的元素System.out.println(list.set(1,"zhaoliu"));//修改集合中下标为1的元素System.out.println(list.contains("wangwu"));//查看"wangwu"是否是集合中的元素list.remove("wangwu");//删除集合中"wangwu"元素list.remove(1);//删除集合中下标为1的元素//for循环遍历集合for(int i=0; i<list.size(); i++){System.out.println(list.get(i));}//使用Iterator迭代器遍历Iterator<String> it = list.iterator();//获取迭代器while(it.hasNext()){System.out.println(it.next());}//使用ListIterator迭代器遍历ListIterator<String> lit = list.listIterator();while(lit.hasNext()){System.out.println(lit.next());}//反向遍历while(lit.hasPrevious()){System.out.println(lit.previous());}}
}

5.2.2 LinkedList类

LinkedList类是List接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。
存储特点:相对有序存储,可以存储相同元素(不排重),可以通过下标访问集合元素,通过链表实现的集合
​
LinkedList集合适用在对元素插入和删除操作较频繁的时候
ArrayList集合适用在对元素查询操作较频繁的时候

5.2.3 Vector

Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是Vector
的大小可以根据需要增大或缩小,以适应创建 Vector后进行添加或移除项的操作。

5.2.4 Stack

Stack类表示后进先出(LIFO)的对象栈。是Vector的子类。

5.2.5 ArrayList与LinkedList,Vector三种实现类存储的比较

a.在用法上和ArrayList完全相同【Vector就是ArrayList的前身】
​
b.底层存储采用的数据结构是数组
c.Vector是一个古老的集合,从JDK1.0开始就有了,Vector存在一些方法名比较长的方法,xxxxElement
d.Vector是线程安全的,效率低
​
ArrayLIst是线程不安全的,效率高,推荐使用ArrayList【Collections工具类中有相应的方法可以将ArrayList改为线程安全的】

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

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

相关文章

华为手机获取状态栏高度是错误的_你的华为手机状态栏有HD图标吗?这又代表着什么?看完你就懂了...

平时比较细心的朋友应该都发现了&#xff0c;华为手机的状态栏(信号栏)有个"HD"图标。有些朋友看到这个图标&#xff0c;可能会担心自己手机是不是出问题了&#xff1f;会不会对手机有什么影响&#xff1f;能不能把它关闭&#xff1f;下面就给大家解惑。1. "HD&…

ext.ajax.request跨域,跨域Ajax访问header中 x-requested-with丢失

前端调用后端接口&#xff0c;本域情况下&#xff0c;ajax方式调用&#xff0c;request header中包含x-requested-with信息。跨域情况下&#xff0c;request header中不再包含x-requested-with。说明&#xff1a;1.前端ajax封装的jquery的$.ajax方法。2.后端header相关设置已允…

bread是可数还是不可数_可数名词不可数名词分不清?出题老师告诉你方法

我是瓶子老师。我有10多年初中英语教学经验&#xff0c;参与过中考一模、二模命题&#xff0c;同时我也是《学生双语报》的撰稿人&#xff0c;为本市超过5万名中考生出过中考模拟试题。在初中英语的学习过程中&#xff0c;我们会讲到可数名词和不可数名词。很多同学总是记不住哪…

nginx指定配置文件启动_【第1717期】Nginx入门指南

前言Nginx有在部署早读课网站的时候用到&#xff0c;平时用的不多&#xff0c;又是一个可以顺便了解的知识点。那个李晓云&#xff0c;这篇是你想了解的吗&#xff1f;今日早读文章由慕小白翻译分享。正文从这开始&#xff5e;&#xff5e;这份指南是对nginx的基本介绍&#xf…

bash: pcre-config: 未找到命令..._Docker 常用操作命令

文章首发于微信公众号《程序员果果》 地址&#xff1a;https://mp.weixin.qq.com/s/S9VkzSJx_JOY8zDiC_nuEg1. 启动容器docker run IMAGE [COMMAND] [ARG...]IMAGE 是指启动容器所使用的操作系统镜像[COMMAND] [ARG...] 指的是容器启动后运行的命令及其参数2. 启动交互式容器#…

es 全量同步mysql_使用canal将mysql同步到es中

因为自己项目中需要用到mysql数据同步到es中&#xff0c;查找了相关资料最后决定用canal来做&#xff0c;所以便有了本文&#xff0c;下面一起来看如何使用canal吧canal教程根据 https://github.com/alibaba/canal 上的原理解释&#xff0c;我们知道 canal 会模拟 mysql slave …

一个列中多行求和_excel表格制作,Excel表格的基本操作,包含制作一个表格10方面的知识(1)...

蒹葭苍苍&#xff0c;白露为霜。所谓伊人&#xff0c;在水一方。溯洄从之&#xff0c;道阻且长。溯游从之&#xff0c;宛在水中央。蒹葭萋萋&#xff0c;白露未晞。所谓伊人&#xff0c;在水之湄。溯洄从之&#xff0c;道阻且跻。溯游从之&#xff0c;宛在水中坻。蒹葭采采&…

实时监控后台数据 vue_实时数据监控,快速掌握B站爆款视频热度走向

飞瓜数据B站版的数据监控功能提供对B站UP主监控功能&#xff0c;实时掌握UP主视频热度走向和投放效果。通过监控输入B站视频链接&#xff0c;设定24/48时长开始对其监控。监控开始后在监控报告中查看对应视频的数据曲线变化或者等待监控结束直接观察整个的曲线走势。实现分钟打…

帧同步_帧同步和状态同步该怎么选(上)

这是一篇拖延了2年多的文章…2017年10月份开始写的&#xff0c;直到这次过年才写完。。。前言随着王者荣耀的崛起&#xff0c;使用帧同步&#xff08;Lockstep&#xff09;的游戏也越来越多&#xff0c;关于帧同步和状态同步的讨论争论也有不少&#xff0c;那么到底该选哪种同步…

实现连麦_直播课程系统如何实现互动连麦效果?

比起录播课&#xff0c;直播课师生能够更好地互动&#xff0c;因此很多老师利用直播课程系统进行直播教学。直播课程系统的连麦互动往往能让直播课充满生机。在直播教学中使用连麦互动功能&#xff0c;老师可以随时提问学生&#xff0c;学生也可以就不懂的问题询问老师&#xf…

c++ 二次开发 良田高拍仪_在网页中调用摄像头实现拍照上传 - 高拍仪二次开发...

来源于 https://blog.csdn.net/weixin_40659738/article/details/78252562在网页中调用摄像头实现拍照上传高拍仪二次开发在一些公共部门的办事处&#xff0c;比如银行、护照办理中心、税务等&#xff0c;我们可能会注意到办公桌上摆着这样一台机器。办公人员用它拍摄各种证件…

复频域求零输入响应_第十四章 动态电路的复频域分析 习题答案

第十四章 动态电路的复频域分析一、选择题1&#xff0e; 图13—1所示电感元件的电压、电流关系的运算形式是 B 。A &#xff0e;)0()()(-L L L Li s sLI s U &#xff1b;B &#xff0e;)0()()(--L L L Li s sLI s U &#xff1b;C &#xff0e;si s sLI s U L L L )0()()(- 2&…

cancase vector_基于Vector总线设备的CAN总线测试方法概述

3.3采样点位置测试测试设备&#xff1a;CANoe、CANStressDR。测试系统架构中需将CANScope旁路处理。测试设备正确接线后(CANStressDR串接在回路中)&#xff0c;CANoe发送报文&#xff0c;CANStressDR采用位干扰的方式进行干扰&#xff0c;具体是采用CANStressDR从后往前逐位干扰…

源码mysql5.7安装过程_mysql5.7 源码安装步骤

操作系统&#xff1a;centos 7说明&#xff1a;以下都是root用户操作的。一、数据库安装1、查看系统是否有旧版的mysql# rpm -qa |egrep -i mysql|mariadb如果有的话请先卸载&#xff0c;卸载命令&#xff1a;# rpm -ev 软件包名称2、查看老版本mysql相关的安装目录&#xff1a…

springboot2整合mysql5_SpringBoot2.X (二十五):SpringBoot整合 Mybatis + MySQL CURD 示例

话不多数&#xff0c;直接开始撸代码…工程结构图开始之前先放张工程结构图1、maven 依赖&#xff1a;org.springframework.bootspring-boot-starter-weborg.mybatis.spring.bootmybatis-spring-boot-starter1.3.2com.github.pagehelperpagehelper-spring-boot-starter1.2.9com…

mysql crash 如何导出数据库_mysql 如何做到crash后无损恢复数据的

ps真实的流程没有我说的那么简单&#xff0c;下面的是最基本的情况。预备知识redologbinlogWAL机制redolog简介redolog是个循环日志&#xff0c;其大小固定为4g&#xff0c;存在2个指针来定位其是否已经满了。一个指针是当前写&#xff0c;一个指针是当前checkpoint,其2个指针的…

python turtle画四叶草的步骤_python turtle工具绘制四叶草的实例分享

本篇文章介绍了python使用turtle库绘制四叶草的方法&#xff0c;代码很简单&#xff0c;希望对学习python的朋友有帮助。import turtleimport timeturtle.setup(650.,350,200,200)turtle.pendown()turtle.pensize(10)turtle.pencolor(green)#四叶草def draw_clover(radius,rota…

python解图片迷宫生成路径_用Python代码来解图片迷宫的方法整理

译注&#xff1a;原文是StackOverflow上一个如何用程序读取迷宫图片并求解的问题&#xff0c;几位参与者热烈地讨论并给出了自己的代码&#xff0c;涉及到用python对图片的处理以及广度优先(BFS)算法等。问题by Whymarrh&#xff1a;当给定上面那样一张JPEG图片&#xff0c;如何…

信号模型噪声服从零均值高斯分布_非高斯噪声下基于分数低阶循环谱的调制识别方法...

1 引言当前&#xff0c;绝大多数非高斯噪声的建模形式都为Alpha稳定分布噪声。首先&#xff0c;Alpha稳定分布符合中心极限定理&#xff0c;在理论上适合应用于实际场景中的噪声建模&#xff1b;其次&#xff0c;Alpha稳定分布由于其参数的可变性&#xff0c;包含高斯分布、柯西…

mysql 时间绝对值_datetime和timestamp--时间戳是绝对值,日期是相对值

遇到的问题&#xff1a;系统时间与数据库时间不一致&#xff0c;系统时间是8:20&#xff0c;存到数据库里是0:20。第一直觉是时区不同导致的。先看一段代码&#xff1a;Java代码public static void main(String[] args) {//System.out.println(TimeZone.getDefault());SimpleDa…