Java高级重点知识点-12-Collection、iterator迭代器、泛型

文章目录

  • Collection集合
  • Iterator迭代器
  • 泛型(难点)

Collection集合

集合是java中提供的一种容器,可以用来存储多个数据。

  1. 集合框架
  • 单列集合java.util.Collection
  • 双列集合java.util.Map

集合类继承体系图:
在这里插入图片描述
List集合的特点:有序可重复
Set集合的特点:无序不重复

  1. Collection功能(单列集合的父接口)
  • public boolean add(E e): 把给定的对象添加到当前集合中 。
  • public void clear() :清空集合中所有的元素。
  • public boolean remove(E e): 把给定的对象在当前集合中删除。
  • public boolean contains(E e): 判断当前集合中是否包含给定的对象。
  • public boolean isEmpty(): 判断当前集合是否为空。
  • public int size(): 返回集合中元素的个数。
  • public Object[] toArray(): 把集合中的元素,存储到数组中。

代码示例:

public static void main(String[] args) {Collection collection = new ArrayList();collection.add("hello");collection.add("world");collection.add("java");collection.add("i");System.out.println(collection.contains("world")); // trueSystem.out.println(collection.isEmpty()); // falseSystem.out.println(collection.size()); // 4Object[] array = collection.toArray();for (int i = 0; i < array.length; i++) {System.out.print(array[i] + ",");}System.out.println();collection.remove("world");System.out.println(collection.contains("world")); // falsecollection.clear();System.out.println(collection.isEmpty()); // true}

在这里插入图片描述
通过add() 方法向集合中添加了四个元素,因此集合的大小为4,调用contains() 方法判断集合中是否存在“world”字符串(在添加的时候添加了“world”字符串),调用 isEmpty() 方法判断集合是否为空(很显然集合中存在四个元素不为空),通过 toArray() 方法将集合元素存储到数组中进行遍历,通过 remove() 方法移除集合中的指定元素“world”,在判断是否存在“world”字符串(很显然为false),最后调用 clear() 方法清除集合中的元素,并且判断集合是否为空(集合中不存在任何元素了,集合为空)。

Iterator迭代器

  1. Iterator接口

Iterator主要用于迭代访问(即遍历)
迭代: 在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。

  • public E next():返回迭代的下一个元素。
  • public boolean hasNext():如果仍有元素可以迭代,则返回 true。
 public static void main(String[] args) {Collection collection = new ArrayList();collection.add("hello");collection.add("world");collection.add("java");collection.add("i");Iterator iterator = collection.iterator();while (iterator.hasNext()){Object next = iterator.next();System.out.println(next);}}

实现原理: 在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

  1. 增强for

增强for语法规则:

for(元素的数据类型  变量 : Collection集合or数组){ }

在遍历的过程中,不能对集合中的元素进行增删操作

   public static void main(String[] args) {Collection<String> collection = new ArrayList<>();collection.add("hello");collection.add("world");collection.add("java");collection.add("i");for (String o : collection) {System.out.println(o);}}

在这里插入图片描述

泛型(难点)

集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。]

  • 泛型:可以在类或方法中预支地使用未知的类型。
  • 泛型是数据类型的一部分,我们将类名与泛型合并一起看做数据类型。
  1. 定义和使用含有泛型的类

定义泛型:

public class Person <E> {}

使用格式: 创建对象的时候确定泛型

public class Person <E> {E name;E age;public E getName() {return name;}public void setName(E name) {this.name = name;}public E getAge() {return age;}public void setAge(E age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name=" + name +", age=" + age +'}';}public static void main(String[] args) {Person<String> person = new Person();person.name = "张三";person.age = "18";System.out.println(person);}
}

这里我们在创建对象的时候就给定泛型String,其中我们的属性name,age也被定义泛型了,这里我们这样理解,当我们给定泛型的时候,该类就变成了如下代码中所定义的。

public class Person {String name;String age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name=" + name +", age=" + age +'}';}public static void main(String[] args) {Person person = new Person();person.name = "张三";person.age = "18";System.out.println(person);}
}
  1. 含有泛型的方法

定义格式:

修饰符 <代表泛型的变量> 返回值类型 方法名(参数){  }

使用格式: 调用方法时,确定泛型的类型

public class Generic {public <VIP> void test(VIP vip){System.out.println(vip.getClass());}public static void main(String[] args) {// 创建对象Generic mm = new Generic();// 演示看方法提示mm.test("aaa");mm.test(123);mm.test(12.45);}
}

在这里插入图片描述

  1. 含有泛型的接口

定义格式:

修饰符 interface接口名<代表泛型的变量> {  }

定义一个接口

public interface MyInterface<E>{public abstract void add(E e);
}
  • 定义类时确定泛型的类型
public class Generic implements MyInterface<String>{@Overridepublic void add(String s) {}
}
  • 始终不确定泛型的类型,直到创建对象时,确定泛型的类型
public class Generic<E> implements MyInterface<E>{@Overridepublic void add(E e) {System.out.println(e);}public static void main(String[] args) {Generic<String> stringGeneric = new Generic<>();stringGeneric.add("123");}
}
  1. 泛型通配符

通配符基本使用:

public static void main(String[] args) {Collection<Integer> list1 = new ArrayList<Integer>();getElement(list1);Collection<String> list2 = new ArrayList<String>();getElement(list2);
}
public static void getElement(Collection<?> coll){}
//?代表可以接收任意类型

通配符高级使用----受限泛型

  • 泛型的上限

格式类型名称 <? extends 类 > 对象名称
意义只能接收该类型及其子类

  • 泛型的下限:

格式类型名称 <? super 类 > 对象名称
意义只能接收该类型及其父类型

代码示例:

public static void main(String[] args) {Collection<Integer> list1 = new ArrayList<Integer>();Collection<String> list2 = new ArrayList<String>();Collection<Number> list3 = new ArrayList<Number>();Collection<Object> list4 = new ArrayList<Object>();getElement1(list1);getElement1(list2);//报错getElement1(list3);getElement1(list4);//报错getElement2(list1);//报错getElement2(list2);//报错getElement2(list3);getElement2(list4);
}
// 泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
public static void getElement1(Collection<? extends Number> coll){}
// 泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
public static void getElement2(Collection<? super Number> coll){}

欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。

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

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

相关文章

新品发布 | TC1018Pro和TC1034Pro正式发布,功能升级,多设备时间同步

新品发布/New products release 同星智能最新推出TC1018Pro和TC1034Pro两款产品&#xff0c;新版本在保留原来基本功能的基础上做了升级&#xff0c;主要新增IO功能、错误帧ID检测、多设备间时间同步等功能。 接下来&#xff0c;让我们看看这两款产品带来了哪些具体功能升级&a…

玄奘取经线路矢量图分享

我们在《透过丝绸之路&#xff0c;看古人都走过哪些地方》一文中&#xff0c;为你分享过丝绸之路的矢量图数据。 现在&#xff0c;我们再为你分享一下玄奘取经线路的矢量图&#xff0c;你可以在文末查看这些数据的领取方式。 玄奘取经线路 《西游记》的故事相信大家都不陌生…

ABC234G Divide a Sequence 题解

题目来源 ABC234G 洛谷 Description 给定长度为 n n n 的序列 { a n } \{a_n\} {an​}。定义一种将 { a n } \{a_n\} {an​} 划分为若干段的方案的价值为每段的最大值减去最小值的差的乘积。求所有划分方案的价值的总和并对 998244353 998244353 998244353 取模。 1 ≤…

项目实训-vue(十一)

项目实训-vue&#xff08;十一&#xff09; 文章目录 项目实训-vue&#xff08;十一&#xff09;1.概述2.页顶导航栏3.导航信息4.总结 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.页顶导航栏 <divstyle"display: flex;justify-content: space-between;alig…

如何挑选洗地机?盘点口碑最好的四大洗地机

在购买洗地机这种智能家电时&#xff0c;大家都应该格外谨慎。毕竟&#xff0c;洗地机价格不菲&#xff0c;精打细算&#xff0c;确保物尽其用才是最重要的。谁都不想花了高价买回来却让它闲置在墙角落灰尘。买之前我们还是需要对自己的需求做一个清晰的判断&#xff0c;实用性…

【unity笔记】六、UI实现下拉列表切换视角

具体步骤如下 1. 创建UI下拉列表&#xff1a; 在Unity场景中右键点击并选择UI -> 下拉列表 来创建一个新的下拉列表。 2. 添加摄像机选项&#xff1a; 在Dropdown的Options属性中添加新的选项&#xff0c;通过点击按钮来添加选项&#xff0c;并为每个选项设置一个显示名…

sourceTree 和Tortoise git软件的对比,以及使用sourceTree管理公司托管的 gitlab 项目或github项目

文章目录 Tortoisegit 和sourcetree的比较如何添加 gitlab 的社区版账号总结参考资料 Tortoisegit 和sourcetree的比较 我在 window都是用 Git 小乌龟&#xff08;Tortoise git&#xff09;来可视化管理 Git 项目。这时是不区分 Git 平台的&#xff0c;也就是不管你用的是 Git…

生产看板管理系统内容有哪些?

相信很多做生产管理的朋友都会遇到如下问题&#xff0c;我就在想&#xff0c;是否能一个创建“透明的”的工作场所&#xff1f;让员工和管理者能够实时查询生产进度&#xff0c;及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能&#xf…

ROS CDK魔法书:点亮博客上云新技能(TypeScript篇)

引言 在数字世界的浩瀚海洋中&#xff0c;信息与数据如同戏剧中的主角&#xff0c;舞动着无形的旋律&#xff0c;构建起信息时代的交响乐。而在这其中&#xff0c;作为一位技术领域的探索者&#xff0c;你的使命便是挥舞着编码的魔杖&#xff0c;创造和守护着这些宝贵的数字灵…

PointCloudLib 3D对象的可视化 C++版本

0.实现效果 显示箭头 vtkOutputWindow::SetGlobalWarningDisplay(0);pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(1, 1, 1);//添加箭头显示pcl::PointXYZ pA(0, 0, 0);pcl:…

openfeign的原理 ????

1、我们使用openfeign调用远程接口就像调用本地方法一样简单。 2、支持spring mvc 注解 3、整合了更多的扩展 &#xff08;请求重试策略、超时控制、请求拦截器&#xff09; 4、open Feign是基于aop的原理&#xff0c;他会通过所加FeignClient的接口&#xff0c;自动拼接接口…

准备篇(三)网页相关知识

Java script小脚本 - 爬取 bilibili 表情Java script 小脚本 - 爬取 bilibili 表情 随便点开一个视频,注意这个页面 URL 对应的 HTML 代码中没有表情的代码, 需要先点一下评论区,然后再在这个页面 URL 对应的元素中找到表情所在的源码。(但是我不知道这个带表情 <pic…

使用ShellHub搭建集中式SSH

SSH 是 Secure Socket Shell 或安全 shell 的缩写。这是一种加密协议&#xff0c;用于通过不安全的网络管理和创建两台计算机之间的安全通信。 SSH 还可用于指代实现 SSH 协议的实用程序套件。有多种身份验证机制&#xff0c;最常见的一种是密码身份验证&#xff0c;但也有基于…

夏老师小课堂(10)影响电机尺寸的因素(2)-电机转速的增加

点击上方 “机械电气电机杂谈 ” → 点击右上角“...” → 点选“设为星标 ★”&#xff0c;为加上机械电气电机杂谈星标&#xff0c;以后找夏老师就方便啦&#xff01;你的星标就是我更新动力&#xff0c;星标越多&#xff0c;更新越快&#xff0c;干货越多&#xff01; 关注我…

【Ant Design Vue的更新日志】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

智慧校园-后勤管理系统总体概述

在今天这个信息化飞速发展的时代&#xff0c;智慧校园后勤管理系统就像一股清新的风&#xff0c;悄悄吹走了过去校园后勤工作中的一些老难题。它就像是个超级聪明的帮手&#xff0c;用上了物联网、大数据那些听起来就很高大上的技术&#xff0c;目的很简单&#xff0c;就是让学…

供应链云仓APP开发:物流行业的数字化转型

在数字化时代&#xff0c;供应链管理正经历着前所未有的变革。供应链云仓APP开发作为这一变革的关键驱动力&#xff0c;为企业提供了一个集成化、智能化的物流解决方案。本文将深入探讨供应链云仓APP开发的重要性、核心功能、开发策略以及它如何助力企业实现物流管理的现代化。…

【独家首发】ONLYOFFICE 8.1:革新办公体验,释放无限创意潜能!

一、全能PDF编辑器&#xff1a;重塑文档管理艺术 官方链接 官方链接&#xff1a;https://www.onlyoffice.com/zh/【点击跳转】 【办公界的变形金刚】ONLYOFFICE 8.1&#xff1a;让文件编辑比变魔术还神奇&#xff0c;一键解锁创意新高度&#xff01;" 在这个数字化的狂潮中…

百元蓝牙耳机哪款好?值得购买的百元蓝牙耳机品牌有这些

在如今移动互联网时代&#xff0c;蓝牙耳机已经成为不少人生活中的必备产品。然而&#xff0c;市面上的蓝牙耳机种类繁多&#xff0c;价格也参差不齐&#xff0c;选择一款性价比高的产品成了不少消费者的难题。尤其是针对百元左右的蓝牙耳机&#xff0c;更是需要慎重选择。那么…

详解 ClickHouse 的副本机制

一、简介 副本功能只支持 MergeTree Family 的表引擎&#xff0c;参考文档&#xff1a;https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/ ClickHouse 副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#…