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中有一个唯一的值对应
PPPoE上网配置不求人:华为路由器命令行操作指南(2023最新版) 本文提供2023年最新的华为路由器PPPoE上网配置命令行操作指南。通过详细的步骤讲解,从连接设备、创建拨号接口、绑定PPPoE客户端到配置内网与NAT,手把手教你完成配置,并附有验证排错方法,助你轻松实现稳定上网。 阅读详情

相关推荐

ROS与UR10e机械臂实战:从零搭建到精准控制

本文详细介绍了如何从零开始搭建ROS与UR10e机械臂的开发环境,包括硬件准备、软件配置、网络设置以及MoveIt!运动控制实战。通过具体的代码示例和常见问题排查,帮助开发者快速掌握UR10e机械臂的精准控制技术,适用于工业自动化和实验室研究场景。

m3n5b7v8c9x的博客 772

使用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

从零实现机械臂抓取仿真:用MoveIt+Gazebo完成物体pick&place全流程

本文详细介绍了如何使用ROS的MoveIt框架与Gazebo仿真环境,从零构建机械臂抓取仿真系统。涵盖环境搭建、MoveIt配置、Gazebo集成、抓取动作实现等全流程,帮助开发者掌握机械臂控制的核心技术,实现高效的pick&place任务。

weixin_29250403的博客 477

【java】【集合】TreeSet

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

love_Aym的博客 252

SpringBoot整合海康SDK实战:从设备初始化到PS流录像转MP4全流程(附避坑指南)

本文详细介绍了SpringBoot整合海康SDK的完整实战流程,涵盖设备初始化、通道管理、录像检索与下载。针对海康设备生成的PS流录像文件无法直接播放的痛点,重点解析了如何利用FFmpeg高效、无损地将其转换为通用的MP4格式,并提供了关键的避坑指南和性能优化建议。

chair的专栏 764

从量子兔AlphaPi硬件拆解到ESP32-C3库开发实战

本文详细拆解了量子兔AlphaPi开发板的硬件构成,重点分析了其核心ESP32-C3芯片及外围传感器。通过逆向工程揭示了GPIO引脚定义与通信协议,并实战演示了如何从零开发MicroPython库,驱动按键、加速度计及LED点阵,最终整合成一个互动平衡球游戏项目,展现了开源硬件在教育与二次开发中的潜力。

weixin_29164497的博客 460

Java TreeSet

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

siriusol的博客 275

【2023】Java利用modbus4j实现工业设备Modbus TCP数据采集与解析

本文详细介绍了在2023年使用Java和modbus4j库实现工业设备Modbus TCP数据采集与解析的完整实践。内容涵盖开发环境搭建、TCP连接建立、开关量与模拟量数据的读取与解析、批量读取性能优化、控制指令写入以及常见错误排查指南,为开发者构建稳定高效的工业物联网数据采集系统提供全面指导。

rose2的博客 723

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

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

weixin_43360025的博客 1334

保姆级教程:在Ubuntu 22.04上搞定PX4 V1.14 + ROS2 Humble的HITL仿真(避坑实录)

本文提供在Ubuntu 22.04上配置PX4 V1.14与ROS2 Humble的HITL仿真环境的详细教程,涵盖环境准备、固件编译、QGroundControl配置、ROS2通信设置及联调测试。特别针对版本兼容性、Gazebo插件构建和MicroDDS配置等常见问题提供避坑指南,帮助开发者高效搭建无人机仿真系统。

weixin_30836759的博客 1004

机器学习分类算法之XGBoost(集成学习算法)

目录 走进XGBoost 什么是XGBoost? XGBoost树的定义 XGBoost核心算法 正则项:树的复杂程度 XGBoost与GBDT有什么不同 XGBoost需要注意的点 XGBoost重要参数详解 调参步骤及思想 XGBoost代码案例 相关性分析 n_estimators(学习曲线) max_depth(学习曲线) 调整max_depth 和min_child_weight 调整gamma 调整subsample 和colsample_bytree 调整正则

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 11万+

《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 Server 2019】Active Directory Certificate Services 证书颁发机构的安装,配置和管理Ⅰ——AD CS的安装和配置

博文主要介绍了Windows Server 2019的证书颁发机构的安装和配置方法。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 4833

JAVA集合知识点整理

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

迟到的help的博客 3081

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java集合基础整理

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

枫林顾南的博客 3603

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java集合整理

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

weixin_43198403的博客 295

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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、付费专栏及课程。

余额充值