集合-进阶

Collection

collection的遍历方式

  • 迭代器遍历
    • 不依赖索引
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class mycollection {public static void main(String[] args) {//1.创建集合并添加元素Collection<String> coll = new ArrayList();coll.add("aaa");coll.add("bbb");coll.add("ccc");coll.add("ddd");//2.获取迭代器对象//迭代器就好比是一个箭头,指向集合中的0索引处Iterator<String> it = coll.iterator();//3.利用循环不断的去获取集合中的每一个元素while(it.hasNext()) {//4.next方法夫人两件事情:获取元素并移动指针String str = it.next();System.out.println(str);}}
}
  • 迭代器的细节注意点:

1.报错NoSuchElementException

2.迭代器遍历完毕,指针不会复位

3.循环中只能用一次next方法

4.迭代器遍历时,不能用集合的方法进行增加或者删除

增强for

//快速生成方式:
//集合的名字+for回车
//1.创建集合并添加元素
collection<string> coll new arrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");
//2.利用增强for进行遍历
//注意点:
1/s其实就是一个第三方变量,在循环的过程中依次表示集合中的每一个数据
for(string s : coll){s "qqq"'
system.out.println(coll);//zhangsan lisi wangwu

List集合

  • 删除元素

请问:此时删除的是1这个元素,还是1索引上的元素?

为什么?

因为在调用方法的时候,如果方法出现了重载现象

优先调用,实参跟形参类型一致的那个方法。

list.remove(1);

  • 练习
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;public class mylist {public static void main(String[] args) {//1.创建列表并添加元素List<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb");list.add("ccc");//1.迭代器方式遍历Iterator<String> it = list.iterator();while (it.hasNext()) {String str = it.next();System.out.println(str);}//2.增强for//下面的变量s,其实是一个第三方的变量而已//在循环的过程中,依次表示集合中的每一个元素for (String str : list) {System.out.println(str);}//3.Lambda表达式//forEach方法的底层启示就是一个循环遍历,依次得到集合的每一个元素//并把每一个元素传递给下面的accept方法//accept方法的形参s,依次表示集合的每一个元素list.forEach(s-> System.out.println(s));}
}

数据结构

  • 栈的特点:后进先出,先进后出

队列

  • 队列特点:先进先出,后进后出
  • 数据从后端进入队列模型的过程称为:入队列

数据从前端离开队列模型的过程称为:出队列

链表

  • 链表中的结点是独立的对象,在内存中是不连续的,每个结点包含数据值和下一个结点的地址。
  • 链表查询慢,无论查询哪个数据都要从头开始找。
  • 链表增删相对快

ArrayList

  • 底层源码

LinkedList集合

  • 底层数据结构是双链表,查询慢,增删快,但是如果操作的是首尾元素,速度也是极快的。
  • LinkedList本身多了很多直接操作首尾元素的特有API。

泛型深入

  • 统一数据类型。
  • 把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来。

泛型的细节

  • 泛型中不能写基本数据类型
  • 指定泛型的具体类型后,传递数据时,可以传入该类类型或者其子类类型

  • 如果不写泛型,类型默认是Object

泛型可以在很多地方进行定义

泛型接口

  • 泛型不具备继承性
  • 此时,泛型里面写的是什么类型,那么只能传递什么类型的的数据

弊端:

利用泛型方法有一个小弊端,此时他可以接受任意的数据线类型

Ye Fu Zi Student

希望:本方法虽然不确定类型,但是以后我希望只能传递 Ye Fu Zi

此时我们就可以使用泛型的通配符:

?也表示不确定的类型

他可以进行类型的限定

?extendsE:表示可以传递E或者E所有的子类类型

?superE:表示可以传递E或者E所有的父类类型

TreeSet

package TreeSetDemo;import java.util.TreeSet;
import java.util.function.Consumer;public class TreeSetDemo2 {public static void main(String[] args) {/*需求:创建5个学生对象属性:(姓名,年龄,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台如果总分一样,按照语文成绩排如果语文一样,按照数学成绩排如果数学成绩一样,按照英语成绩排如果英文成绩一样,按照年龄排如果年龄一样,按照姓名的字母顺序排如果都一样,认为是同一个学生,不存。*///默认排序//创建学生对象Student s1 = new Student("zhangsan",23,77,88,99);Student s2 = new Student("lisi",23,87,67,99);Student s3 = new Student("wangwu",23,67,85,78);Student s4 = new Student("zhaoliu",23,87,86,87);//创建集合TreeSet<Student> treeSet = new TreeSet<Student>();treeSet.add(s1);treeSet.add(s2);treeSet.add(s3);treeSet.add(s4);//增强forfor (Student t : treeSet) {System.out.println(t);}}
}
package TreeSetDemo;public class Student implements Comparable<Student>{private String name;private int age;private int chinese;private int math;private int english;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", chinese=" + chinese +", math=" + math +", english=" + english +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getChinese() {return chinese;}public void setChinese(int chinese) {this.chinese = chinese;}public int getMath() {return math;}public void setMath(int math) {this.math = math;}public int getEnglish() {return english;}public void setEnglish(int english) {this.english = english;}public Student(String name, int age, int chinese, int math, int english) {this.name = name;this.age = age;this.chinese = chinese;this.math = math;this.english = english;}public Student() {}@Overridepublic int compareTo(Student o) {int sum1 = this.getChinese() + this.getMath() + this.getEnglish();int sum2 = o.getChinese() + o.getMath() + o.getEnglish();int i = sum1 - sum2;i = i == 0 ? this.getChinese() - o.getChinese() : i;i = i == 0 ? this.getMath()- o.getMath() : i;i = i == 0 ? this.getEnglish()- o.getEnglish() : i;i = i ==0 ? this.getAge() - o.getAge() : i;i = i ==0 ? this.getName().compareTo(o.getName()) : i;return i;}
}

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

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

相关文章

【八股战神篇】Java集合高频面试题

专栏简介 八股战神篇专栏是基于各平台共上千篇面经&#xff0c;上万道面试题&#xff0c;进行综合排序提炼出排序前百的高频面试题&#xff0c;并对这些高频八股进行关联分析&#xff0c;将每个高频面试题可能进行延伸的题目再次进行排序选出高频延伸八股题。面试官都是以点破…

Android之横向滑动列表

文章目录 前言一、效果图二、使用步骤1.xml布局2.代码3.HomeHxBean3.adapter4.item布局5.两个drawable 总结 前言 横向滑动列表有多种实现方式&#xff0c;也可以用tablayout&#xff0c;也可以用recyclerview&#xff0c;今天主要介绍recyclerview。 一、效果图 二、使用步骤…

关于物联网的基础知识(二)——物联网体系结构分层

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网的基础知识&#xff08;二&a…

【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中

WMNav 是由VLM视觉语言模型驱动的&#xff0c;基于世界模型的对象目标导航框架。 设计一种预测环境状态的记忆策略&#xff0c;采用在线好奇心价值图来量化存储&#xff0c;目标在世界模型预测的各种场景中出现的可能性。 本文分享WMNav复现和模型推理的过程&#xff5e; 下…

英语学习5.17

attract &#x1f449; 前缀&#xff1a;at-&#xff08;朝向&#xff09; &#x1f449; 含义&#xff1a;吸引&#xff08;朝某处拉&#xff09; 例句&#xff1a;The flowers attract bees. &#xff08;花吸引蜜蜂。&#xff09; distract &#x1f449; 前缀&#xff…

【软考 McCabe度量法】

McCabe度量法&#xff08;McCabe’s Cyclomatic Complexity&#xff09;是由Thomas McCabe提出的一种用于衡量程序模块环路复杂性的软件度量方法。它通过分析代码的控制流结构来评估程序的复杂度&#xff0c;帮助开发者识别难以维护或测试风险较高的代码区域。 一、McCabe度量法…

解读 TypeScript 枚举Enum

TypeScript 枚举通过命名常量、类型安全和结构化组织&#xff0c;显著提升代码质量。使用时需根据场景选择合适的类型&#xff08;数字、字符串或常量枚举&#xff09;&#xff0c;并权衡性能与动态访问需求。掌握其特性和使用的场景&#xff0c;能在复杂项目中有效提升代码的可…

MODBUS RTU通信协议详解与调试指南

一、MODBUS RTU简介 MODBUS RTU&#xff08;Remote Terminal Unit&#xff09;是一种基于串行通信&#xff08;RS-485/RS-232&#xff09;的工业标准协议&#xff0c;采用二进制数据格式&#xff0c;具有高效、可靠的特点&#xff0c;广泛应用于PLC、传感器、变频器等工业设备…

TCP/UDP协议原理和区别 笔记

从简单到难吧 区别就是TCP一般用于安全稳定的需求&#xff0c;UDP一般用于不那么需要完全数据的需求&#xff0c;比如说直播&#xff0c;视频等。 再然后就是TPC性能慢于UDP。 再然后我们看TCP的原理&#xff08;三次握手&#xff0c;数据传输&#xff0c;四次挥手&#xff0…

Jackson使用详解

JSON Jackson是java提供处理json数据序列化和反序列的工具类&#xff0c;在使用Jackson处理json前&#xff0c;我们得先掌握json。 JSON数据类型 类型示例说明字符串&#xff08;String&#xff09;"hello"双引号包裹&#xff0c;支持转义字符&#xff08;如 \n&a…

C语言| 指针变量的定义

C语言| 指针的优点-CSDN博客 * 表示“指向”&#xff0c;为了说明指针变量和它所指向的变量之间的联系。 int * i&#xff1b;//表示指针变量i里面存放的地址&#xff0c;所指向的存储单元里的【数据】。 【指针变量的定义】 C语言规定所有变量&#xff0c;在使用前必须先定…

Java 快速转 C# 教程

以下是一个针对 Java 开发者快速转向 C# 的简明教程&#xff0c;重点对比 Java 与 C# 的异同&#xff0c;帮助你快速上手。 项目结构&#xff1a; .sln &#xff1a;解决方案文件&#xff0c;管理多个项目之间的依赖关系。.csproj &#xff1a;项目文件&#xff0c;定义目标框…

EasyExcel详解

文章目录 一、easyExcel1.什么是easyExcel2.easyExcel示例demo3.easyExcel read的底层逻辑~~4.easyExcel write的底层逻辑~~ 二、FastExcel1.为什么更换为fastExcel2.fastExcel新功能 一、easyExcel 1.什么是easyExcel 内容摘自官方&#xff1a;Java解析、生成Excel比较有名的…

jvm安全点(三)openjdk17 c++源码垃圾回收之安全点结束,唤醒线程

1. VMThread::inner_execute() - 触发安全点​​ cpp 复制 void VMThread::inner_execute(VM_Operation* op) { if (op->evaluate_at_safepoint()) { SafepointSynchronize::begin(); // 进入安全点&#xff0c;阻塞所有线程 // ...执行GC等操作... SafepointSynchronize::…

102. 二叉树的层序遍历递归法:深度优先搜索的巧妙应用

二叉树的层序遍历是一种经典的遍历方式&#xff0c;它要求按层级逐层访问二叉树的节点。通常我们会使用队列来实现层序遍历&#xff0c;但递归法也是一种可行且有趣的思路。本文将深入探讨递归法解决二叉树层序遍历的核心难点&#xff0c;并结合代码和模拟过程进行详细讲解。 …

首个窗口级无人机配送VLN系统!中科院LogisticsVLN:基于MLLM实现精准投递

导读 随着智能物流需求日益增长&#xff0c;特别是“最后一公里”配送场景的精细化&#xff0c;传统地面机器人逐渐暴露出适应性差、精度不足等瓶颈。为此&#xff0c;本文提出了LogisticsVLN系统——一个基于多模态大语言模型的无人机视觉语言导航框架&#xff0c;专为窗户级别…

WPF Datagrid 数据加载和性能

这篇文章并非讨论 WPF Datagrid 的性能数据&#xff0c;而只是简单介绍一下为了使其性能良好&#xff0c;你需要注意哪些方面。我不太想使用性能分析器来展示实际数据&#xff0c;而是尽可能地使用了 Stopwatch 类。这篇文章不会深入探讨处理海量数据的技术&#xff0c;例如分页…

matlab求矩阵的逆、行列式、秩、转置

inv - 计算矩阵的逆 用途&#xff1a;计算一个可逆矩阵的逆矩阵。 D [1, 2; 3, 4]; % 定义一个2x2矩阵 D_inv inv(D); % 计算矩阵D的逆 disp(D_inv);det - 计算矩阵的行列式 用途&#xff1a;计算方阵的行列式。 E [1, 2; 3, 4]; determinant det(E); % 计算行列式 disp…

ridecore流水线解读

文章目录 流水线stage分属前后端PCpipelineIFIDDPDP 与 SW 中间没有latchSWCOM 源码地址 流水线stage分属前后端 IF -> ID -> DP -> SW -> EX -> COM分类阶段说明前端IF指令获取阶段。PC 使用分支预测器&#xff0c;访问指令存储器。典型前端操作。前端ID解码并…

【SpringBoot】关于MP使用中配置了数据库表前缀的问题

problem 使用MP时&#xff0c;在application.yml配置文件中配置了MP匹配数据库表中的表名时的前缀作了规定&#xff0c;如下&#xff1a; 那么当我运行时报错了错误&#xff0c;报错信息如下&#xff1a; 因为我数据库表的书类表名是book&#xff0c;MP在匹配时使用了表名前…