JAVA基础整理(迭代器,Set集合 TreeSet)

容器作业 1. 使用HashSet和TreeSet存储多个商品信息,遍历并输出;其中商品属性:编号,名称,单价,出版社;要求向其中添加多个相同的商品,验证集合中元素的唯一性。 提示:向HashSet中添加自定义类的对象信息,需要重写hashCode和equals( )  向TreeSet中添加自定义类的对象信息,需要实现Comparable接口,指定比较规则 public class Goods im 阅读详情

如何遍历list

JDK1.7之前底层有一个大小为10的空数组,但是用的无参数,集合中没有元素,所以size为0

JDK1.8 之后提供了优化,不会创建一个10大小的数组,调用add函数,开始开辟堆空间,即数组大小

普通for循环 for(;?

增强for循环 (底层就是使用的迭代器实现,所以只能打印,不能赋值)

for(object e:list){
    system.out.println(e);
}

迭代器遍历

hasNext会把指针向下移动来判断下一个是否有值

hasNext()判断迭代器中是否还有下一个元素 有ture
next() 获取上一个元素
remove() 迭代器中的删除方法,删除会同步到集合中,切记绝对不能在迭代器中使用集合对象删除元素,因为无法同步给迭代器对象
Iterator it = list.iterator();
while(it.hasNext()){
    system.out.println(it.next());
    //迭代器中禁止使用集合对象删除集合中的元素,只能使用迭代器的方法删除
}
for(Iterator its = list.iterator();its.hasNext;){
    system.out.println(it.next());
}

当前没有Iterator的时候,迭代器使用Enumeration——这个只适用于Vector(了解)

Vector v = new Vector();
v.addAll(list);
//迭代遍历
Enumeration elements = v.elements(); //需要判断是否还有下一个元素      
while(elements.hasMoreElements()) {
        //取值 
    System.out.println(elements.nextElement());
}

基础器迭代器有一个子类,比基础迭代器更加强大 ListIterator,提供了多个方法

在这里插入图片描述

ListIterator Iter = list.listIterator(); 
while(Iter.hasNext()) {//是否还有下一个元素 
    System.out.println(Iter.next());
}
//需要获取的指针在最后一个位置即遍历的时候遍历到集合的末尾 //当前迭代器中提供了向上遍历的方式 
while(Iter.hasPrevious()) {//是否还有上一个元素
    System.out.println(Iter.previous());//获取元素值
}

LinkedList提供了一个特有的迭代器 descendingIterator (降序迭代器)

//使用方式和基础迭代器一样 linkedlist专有
Iterator descendingIterator = list.descendingIterator();
while(descendingIterator.hasNext()) {
    System.out.println(descendingIterator.next());    
}
迭代器异常问题

并非迭代异常

Iterator it = list.iterator(); //遍历迭代器对象,判断是否是否还有下一个元素 
while(it.hasNext()) {
//通过迭代器对象获取集合中元素,但是集合中的元素的类型是Object类型,需要进行对象的向下转型 
    String str = (String)it.next();
    if(str.equals("A")) { 
        //在迭代器中绝对禁止使用集合对象删除集合中元素,只能使用得带器中带有的方法才可删除 
        //list.remove("C");
        //需要使用迭代器对象中方法删除
        it.remove();
     } 
}

基本上ArrayList采用size属性来维护自已的状态,而Iterator采用cursor来来维护自已的状态。

当size出现变化时,cursor并不一定能够得到同步,除非这种变化是Iterator主动导致的。

从上面的代码可以看到当Iterator.remove方法导致ArrayList列表发生变化时,他会更新cursor来同步这一变化。但其他方式导致的ArrayList变化,Iterator是无法感知的。ArrayList自然也不会主动通知Iterator们,那将是一个繁重的工作。Iterator到底还是做了努力:为了防止状态不一致可能引发的无法设想的后果,Iterator会经常做checkForComodification检查,以防有变。如果有变,则以异常抛出,所以就出现了上面的异常。

set集合

set是collection集合的子接口,无序,排除重复,set集合中主要使用Hash算法

(HashSet集合—>>子类LinkedHashSet集合 TreeSet集合)

Hash也称散列,为了快速存取角度设计,空间置换—空间换时间, hash的组成是一种线性表(数组+链表)

散列表,是根据键值对映射关系记录储存的位置,加快查找,这个映射就是“散列函数”存放记录的位置就叫做“散

列表”

同义词:因为存储数据在散列列表中,会存在一个问题,即两个元素通过散列函数计算的地址相同,那么这两个元素就是同义词

散列函数计算的机构会存储到一个具体的单元,称为“桶”。桶的范围就是从0到-1

如何存储到hash表

hash表是数组+链表的形式实现,数组作为位置存在,链表作为具体值存储

散列函数----hash(key)%len—计算出位置

在这里插入图片描述

扩容问题

java中散列表单元大小都是2的幂,初始大小为16(即2的4次幂)系统提供的加载(负载)因子是0.75,当存的数据达到加载因子的时候(即16*0.75 = 12),此时hashSet将会重新计算散列表,将里面原有的散列结构全部抛弃,重新开辟一个散列空间32(即2的5次幂),此时会重新计算所有数据并将数据重新存储,当前hash表扩容性能较低

ps:**加载因子:**存储70个元素,但是存70个元素申请了100个空间, 70 / 100 = 0.7 这个数字就是负载(加载)因子

TreeSet集合(排序)

TreeSet集合是一个自带排序的集合,也继承Set集合这边的排重功能。

JDK1.7之前用二叉树,JDK1.8之后使用是红黑二叉树(平衡二叉树)

linux系统就是树状态系统,

需要排序必须是相同数据类型,需要实现comparable接口—应对的是treeset无参构造方法

当前对象.属性-传入对象.属性==>升序

传入对象.属性-当前对象.属性==>降序

一般java中所提供的系统类包装类或者其他引用类型基本上都是先实现Comparable

list集合和set集合的父类 collection类,所以当Collection作为参数的时候可以接受一个list集合的实现类,也可以接受一个set集合的时候类

泛型

1.集合可以储存任何数据类型(引用类型),数据的数据类型是Object类型

作用:想规范集合储存数据,也就是在向集合储存数据的时候对其储存数据类型进行检查,使用泛型. 不是这个类型会报错

List<Integer> list =  new List();
//list储存不是Integer的类型会报错

2.设计一个点point,来封装坐标,需要支持String,Integer,Double,Float

class Point<T>{
    private T x;
    private T y;
}

占位符:本身没有意义,只是占位,只有给当前的占位符的位置赋值一个具体类型时它才会有真正的意义

泛型:可以达到一个通用型 通过<占位符>———在编译时期检查是否满足当前设计的数据类型

泛型是使用在编译阶段的,编译时期结束后生成的.class文件中不存在泛型

泛型应用

泛型作用在类上,创建类的时候动态的获取数据类型

//在类上定义的泛型可以应用在整个类体上
语法:访问权限修饰符 class 类名<占位符>{
       类体中就可以应用了
}

占位符一般是被一个字母(26个英文字母大小(任意))
public class GenericityClass<T,M>{
      private T x;
      private T y;
      public GenericityClass(T x,T y){
            this.x = x;
            this.y = y;
      }
      public void show(T t){ //泛型T作为方法的参数数据类型
           system.out.println(t);
      }
      
      public<E> E showInfo(E e){//占位符可以在方法的声明时使用,可以作为返回值
           return e;
      }
      
      //静态方法不能使用类所提供的泛型,因为static的优先级高,加载时泛型还没有
      public static<M> void display(M m){
      
      }
}

public class test{
    public static void main(String args){
        GenericityClass<Integer> gc = new GenericityClass<Integer>(1,2);
        创建类的时候进行泛型赋值,此时给泛型赋值上了集体的数据类型
        GenericityClass<String> gc = new GenericityClass<String>("1","2");
        gc.showInfo = gc.showinfo(1);//会根据参数自动推断其数据类型
    }
}
泛型在接口上
public interface inte<T>{
    //T NAME = "nini"; 这里是不可以的,因为是静态常量
    void run(T t);
    default T getName(T t){
        return t;
    }
    static<E> void setName(E e){
        system.out.println(e);
    }
}
泛型限定

对传人的数据进行约束

<? extends 累> ?是通配符 作用可以代表数据类型 但这个数据类型会被后面的类说约束 #### Map集合 设A,B两个非空集合,如果存在一个法则f,使的A中内一个元素,按照法则f在b中有一个唯一的值对应
【Matlab】多旋翼无人机视觉伺服跟踪控制程序 本文介绍了基于Matlab的多旋翼无人机视觉伺服跟踪控制程序开发方法。该系统采用视觉感知、坐标转换、伺服控制和仿真验证四个核心模块,通过HOG+SVM目标检测、Shi-Tomasi特征提取和PID双闭环控制算法实现动态目标跟踪。详细阐述了相机标定、目标检测、坐标转换及伺服控制等关键环节的Matlab实现代码,并进行了仿真验证。结果表明该系统在±0.1m的跟踪精度下可实现100Hz的实时处理,适用于室内外复杂场景。文章还提出了工程应用中的优化建议,为无人机视觉伺服系统的开发提供了完整的技术方案。 阅读详情

相关推荐

【Claude Code】Claude Code 使用指南

本文介绍了AI编码助手Claude的基础和进阶操作指南。基础部分涵盖启动命令、模式切换(自动编辑/Plan/Yolo模式)、资源监控等核心功能,重点讲解了斜杠命令的使用方法。进阶操作详细说明了CLAUDE.md文件的创建与管理,包括项目规范、代码风格等内容的配置,以及如何通过该文件建立持久上下文。同时提醒了使用过程中的安全风险,建议通过配置文件限制AI对关键代码的访问权限。全文提供了完整的操作指引和安全建议,帮助开发者高效安全地使用Claude进行编码辅助。

大家好,我是敖云岚,一个沉迷代码的 “技术玩家”。擅长 Java、C++ 开发,对 MySQL、Redis、RabbitMQ 等技术也颇有研究。博客里既有硬核技术干货,也有诙谐幽默的编程日常分享。愿和你一起,笑着学技术,快乐敲代码! 1万+

使用HashSet和TreeSet存储多个商品信息,遍历并输出;其中商品属性:编号,名称,单价,出版社;要求向其中添加多个相同的商品,验证集合中元素的唯一性。 提示:向HashSet中添加自定义

package com.sxt.java17d.homeworkextends; /**  * @author 刘萌  *包括学号,姓名,年龄信息  */ public class Student implements Comparable{ private String no;  private String name; private int age; public Stud

lm8580552lm的博客 5477

从‘最速控制’到代码:深入拆解韩京清ADRC中TD跟踪器的fhan函数(含Matlab/Simulink实例)

本文深入解析韩京清ADRC中的fhan函数,从理论到代码实现,详细拆解其在Matlab/Simulink中的应用。通过分析最速控制问题和非线性TD的连续形式,揭示fhan函数在信号处理和噪声抑制中的独特优势,并提供工程实践中的参数整定和优化技巧。

weixin_42659194的博客 247

【java】【集合】TreeSet

一、概述TreeSet集合是用来对对象元素进行排序的,同样也可以保证元素的唯一,底层是二叉树实现二、TreeSet唯一性原理 1.特点    * TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列 2.使用方式    a.自然顺序(Comparable)        *  TreeSet类的add()方法中会把存入的对象提升为Comparable类型       ...

love_Aym的博客 252

MTK Sensor驱动调试实战:从AP到SCP的完整流程解析

本文详细解析了MTK平台Sensor驱动从AP侧到SCP侧的完整调试流程。内容涵盖AP侧驱动集成、DTS配置、内核编译与验证,以及SCP侧Tinysys框架下的代码集成、Overlay配置与I2C设置等核心步骤,并分享了中断唤醒、功耗优化及传感器数据校准等实战经验与常见问题排查方法,为硬件驱动工程师提供了一份全面的实战指南。

weixin_29175469的博客 354

OpenRadar Matlab版:毫米波雷达信号处理全流程开源库详解

毫米波雷达数据解析与信号处理是感知领域的基础能力。本文介绍毫米波雷达从ADC原始采样到距离-多普勒(Range-Doppler)热图、CFAR检测、DOA估计直至点云与生命体征参数提取的完整处理链路,并深入讲解OpenRadar(Matlab版)开源库的内核设计、核心API与实测经验。从原理上看,距离FFT与多普勒FFT构成RD谱,CFAR自适应阈值实现目标检测,相位解缠与滤波用于呼吸心跳提取。技术价值在于将繁琐的雷达数据读取、矩阵变换和算法流程标准化,免去重复造轮子。可应用于人员存在感知、生命体征监护、4

weixin_33806859的博客 322

Java TreeSet

TreeSet 是基于 TreeMap 实现的。TreeSet 中含有一个 NavigableMap 类型的成员变量 m,而 m 实际上是 TreeMap 的实例。TreeSet 是 SortedSet 接口的实现类,TreeSet 可以保证元素处于排序状态,它采用红黑树的数据结构来存储集合元素。TreeSet 支持两种排序方法:自然排序和定制排序,默认采用自然排序。 自然排序 TreeSet 会...

siriusol的博客 275

Windows下Python安装geopandas全攻略:解决GDAL依赖问题的5个关键步骤

本文详细解析了在Windows系统下安装Python地理空间分析库geopandas时,如何有效解决其核心依赖GDAL的编译难题。文章提供了五个关键步骤,包括理解依赖关系、获取预编译wheel文件、顺序安装及环境验证,旨在帮助用户绕过复杂的C++编译环境,顺利完成geopandas的安装部署。

weixin_28221501的博客 285

Java学习(93)Java集合排序——TreeSet的使用

Java学习(93)Java集合排序——TreeSet的使用

weixin_43360025的博客 1334

STM32G474多通道ADC电压采集:软件触发与单次转换实战

本文详细介绍了STM32G474多通道ADC电压采集的实战方法,重点讲解了软件触发与单次转换的实现技巧。通过硬件设计、HAL库配置、多通道轮询采集及数据处理等环节的详细解析,帮助开发者高效完成精确电压采集任务。文章还提供了常见问题调试技巧和性能优化建议,适用于需要高精度电压监测的嵌入式应用场景。

weixin_28720767的博客 463

Ubuntu22.04如何安装cuDNN8.9.7

本文详细介绍了在Ubuntu 22.04系统上为CUDA 12.2安装适配cuDNN 8.9.7的完整流程,特别针对RTX A6000显卡。主要内容包括:1)选择与CUDA 12.2兼容的cuDNN版本;2)使用deb包方式的安装步骤(添加仓库、导入密钥、安装组件);3)通过MNIST示例验证安装;4)版本锁定、卸载旧版等补充说明;5)性能测试方法。文中强调了版本匹配的重要性,并提供了多卡配置建议,为搭建深度学习开发环境提供完整指导。

2501_93651177的博客 1845

《Set》Java中的Set用法(详细整理)

常见的Set类型:HashSet 特性:元素唯一,无序,可以含有空元素。 下面我们看示例: import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class first { public static void main(String[] args) { Set<String> str = new HashSet<String>(); .

Zyy~的博客 3万+

Windows 10 本地硬盘变成了可弹出磁盘

今天新装了系统, 电脑是一个SSD+HHD, 没想到装好之后右下角显示可安全删除设备, 两个硬盘在那里. 这还得了. 查了一下午, 大致知道了是什么问题. Standard SATA AHCI controller使用高性能的硬盘模式就会把硬盘看作是一个可热插拔的存储器, 所以自然就会显示可弹出. 如果你的BIOS支持关闭HotSwap或者HotPlug, 那么直接关闭就可以了. 或者你直接在BIOS里把磁盘模式改为IDE, 不过这样就发挥不好你SSD的高性能了. 还有一种解决方法, 就是手动让系统把这两个

落日之城 4万+

JAVA集合知识点整理

接口继承关系和实现 集合类存放于 Java.util 包中, 主要有 3 种: set(集)、 list(列表包含 Queue) map(映射) 1. Collection: Collection 是集合 List、 Set、 Queue 的最基本的接口。 2. Iterator:迭代器,可以通过迭代器遍历集合中的数据 3. Map:是映射表的基础接口 ...

迟到的help的博客 3081

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java集合基础整理

Java基础集合整理 集合是java中提供的一种容器,可以用来存储多个数据。集合和数组的区别在于:数组的长度是固定的。集合的长度是可变的。数组中存储的是同一类型的元素,可以存储任意类型数据。集合存储的都是引用数据类型。如果想存储基本类型数据需要存储对应的包装类型。Java里边主要有两种集合,Collection接口和Map接口

枫林顾南的博客 3603

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java集合整理

Java 集合整理 概述: java的集合类存放在Java.util包中,主要有三种:List(包含Queue)、Set、Map 接口继承关系与实现(见下图) Iterator: 迭代器,迭代遍历集合中的元素 Collection: Collection是集合List、Set、Queue最基本的接口 Map: 做为映射表的基础接口 Iterator(迭代器) 集合很像是生活中的容器,作...

weixin_43198403的博客 295

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA基础——集合知识点整理

当一个类有自己特有的“逻辑相等”概念,当改写equals()的时候,总是要改写hashCode(),根据一个类的equals方法(改写后),两个截然不同的实例有可能在逻辑上是相等的,但是,根据Object.hashCode()方法,它们仅仅是两个对象。jdk7中的ArrayList的对象的创建类似于单例的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式,延迟了数组的创建,节省内存。//第一次调用add()时,底层才创建了长度10的数组,并将数据123添加到elementData[0]

jsdtfza的博客 1048

JAVA 基础知识整理-13(集合类)Set, HashSet,LinkedHashSet,TreeSet

1. Set 类 一个不包含重复元素的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。 方法摘要 boolean add(E o) 如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。 boolean addAll(Collection&...

KathyLJQ的博客 220

java集合详解

1.java集合是什么? java集合实际上是一种经常被运用到的java类库,其中提供了已经实现的的数据结构,省去了程序员再次编写数据结构的事情.在Leetcode中经常会被用到,有很重要的作用. 集合体系 我们发现,无论是Set和List都是继承于Collection接口,实现Collection之中的方法,而他们又衍生出了HashSet,LinkedList等等我们经...

李旭的博客 5503

单列集合---Set系列集合

关于set系列集合的总结,可能并不完整

m0_62558112的博客 1306

JAVA集合框架知识点整理

集合整理

weixin_46096297的博客 1192

Java集合List、Set、Map

集合是 java 基础中非常重要的一部分,同样也是 Java 面试中很重要的一个知识点。所以,给王小整理了这篇关于集合的文章。 1、接口继承关系以及实现 集合类存放于 Java.util 包中,主要有 3 种:set、list 和 map。 Collection:Collection 是集合 List、Set、Queue 的最基本的接口 Iterator:迭代器,可以通过迭代器遍历集合中的数...

niceyoo的博客 364

Java集合超详细整理——Onjava8

Java集合超详细整理——Onjava8数组和集合的区别:集合中的泛型和类型安全集合的基本组成Iterators迭代器List集合Set集合映射Map(双列集合)Map的四种遍历方式 java.util包中提供了一套相当完整的集合类,来储存复杂的对象,且只能存放对象,即时它保存的是基本数据类型,也会将它自动转换成Integer包装类型之后再存入集合中。集合中存放的都是对象的引用而非对象那个本身。 数组和集合的区别: 数组长度固定,集合长度可变 数组可以存值也可以存对象的引用,但集合只能存对象的引用。

Tomas_yue的博客 929

集合的整理(List,Set详解)

集合的整理(List,Set,Map详解) 集合的特点: 1.集合能够对数据进行增加删除修改查询的操作 2.集合能够存储引用类型,如果是基本类型可以是包装类类型 3.集合的长度是可变的 集合和数组的区别: 1.长度区别 ...

qq_45393105的博客 640

java集合整理

java集合框架是java语言编程的基础,也是java面试中的一个重要的面试点,这里,我简单的整理了一下 相关的知识点。 首先,看下面的图,大致了解集合的一些关系: Collection接口是List、Set、Queue的父级接口。 Iterator接口是Conllection的父级接口。 Map跟Conllection没有任何关系。 1,iterator迭代器的作用: ...

qq_40973475的博客 281

黑马程序员-----笔记整理(java基础十----集合)

---------------------- android培训、java培训、期待与您交流! ----------------------          抓紧整理完睡觉吧,脑瓜子有点发蒙的感觉。 集合   1.0 集合特点:   1.1 Object   1.2 集合框架的工具类   1.3 泛型   1.4 集合使用技巧   1.5 foreach   集合练习

李保成(Net) 4838
上一篇: Java基础知识整理 (Date类,Calender类,枚举,异常,throw和throws抛出异常)
下一篇: Java基础整理 (NIO,Buffer,Channel通道)
码上发财V
博客等级 码龄11年 4粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值