【Java基础】笔记

List和ArrayList区别

public class Arrays_BugDemo
{
    public static void main(String[] args)
    {
        /*
         * List 是一个固定大小的列表,虽然可以进行查询操作,但不支持添加、删除或修改元素。
         * 如果需要一个可以动态修改的列表,可以使用 ArrayList 进行包装。
         */
        // 如果初始化后,还是要进行动态修改,可以外面包一层New ArrayList
        List<Integer> list = new ArrayList<>( Arrays.asList(1, 2));

        //相当于New一个list 将元素1跟2封装进这个list集合中
        // List<Integer> list = Arrays.asList(1, 2);
        list.add(3); // 给list添加数据报错

        list.forEach(System.out::println);

        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(232);
        arrayList.add(2324);
        arrayList.forEach(System.out::println);
    }
}

在这里插入图片描述
直接对List进行添加元素,会报错不支持该操作异常,原因:

在这里插入图片描述
阿里巴巴Java开发规范,使用工具类 Arrays.asList() 方法把数组转换成集合时,不能使用其修改集合相关的方法。

因为它的 add/remove/clear 方法会抛出 UnsupportedOperationException() 本质上的原因是因为List列表是固定大小的,不能够进行动态修改。
在这里插入图片描述
Arrays.ArrayList类继承自AbstractList,实现了List接口。它重写了add()、remove()等修改List结构的方法,并将它们直接抛出UnsupportedOperationException异常,从而禁止了对List结构的修改。

具体来说,Arrays.asList()方法返回的是Arrays类中的一个私有静态内部类ArrayList,它继承自AbstractList类,实现了List接口。


迭代器遍历时,不能动态修改

public class IteratorRemoveDemo
{
    public static void main(String[] args)
    {
        List<Integer> list = new ArrayList<>();
        list.add(11);
        list.add(12);
        list.add(13);
        list.add(14);
        list.add(15);

        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext())
        {
            Integer value = iterator.next();
            if(value == 12)
            {
                // 在迭代过程中,不允许修改集合元素,否则会抛出异常。
                //list.remove(value); //Exception in thread "main" java.util.ConcurrentModificationException

                // 使用迭代器的 remove() 方法删除元素
                iterator.remove();
            }
        }
        list.forEach(v -> System.out.println(v));
    }
}

在这里插入图片描述
报错:并发修改异常,遍历时迭代器进行了动态修改

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述这里可以看出,通过迭代器Iterator中的next() 方法中有一个checkForComodification();方法,在每次调用 next() 方法时,迭代器会检查 modCount 是否等于 expectedModCount

如果不相等,说明在遍历过程中 ArrayList 被修改过,迭代器会抛出 ConcurrentModificationException 异常。

  • modCount :AbstractList类中的一个成员变量,由于ArrayList继承自AbstractList,ArrayList中的modCount变量也继承过来了。 modCount 记录了 ArrayList 从创建以来对其结构进行的修改次数,这里的“结构修改”指的是添加、删除元素,不包括修改
  • expectedModCount : 就是迭代器期望的修改次数,用于记录在创建迭代器时ArrayList的modCount值。在创建得迭代器的时候,expectedModCount 的值就是modCount的值。
    在这里插入图片描述

Hash冲突

public class HashCode {
    static class stu {
    }
    public static void main(String[] args) {
        HashSet<Integer> hashSet = new HashSet<>();
        for (int i = 1; i < 15*10000; i++) {
            int stuCode = new stu().hashCode();
            // 检查HashSet中是否已存在当前学生的哈希码
            if(!hashSet.contains(stuCode)){ // 如果HashSet中没有该哈希码,则添加
                hashSet.add(stuCode);
            }else{ // 如果HashSet中已存在该哈希码,则视为哈希冲突
                System.out.println("发生了hash冲突,在第:"+i+"次的hash值为:"+stuCode);
            }
        }
        // 打印HashSet的大小,即不重复的哈希码数量
        System.out.println(hashSet.size());
    }
}

哈希冲突的原因

  • 哈希码范围有限:哈希码通常是固定长度的整数,而对象数量可能远超这个范围。
  • 哈希函数设计:即使设计良好,哈希函数也无法完全避免产生相同的哈希码。
  • 数据特性:某些数据集可能导致哈希码更集中,增加冲突概率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

思维导图+实现一个登录窗口界面

QQ2024122-205851 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QLabel, QVBoxLayout# 封装我的窗口类 class LoginWidget(QWidget):# 构造函数def __init__(self):# 初始化父类su…

InterHub:为自动驾驶提供密集互动事件的自然驾驶轨迹数据集

InterHub 是一个为自动驾驶领域设计的自然驾驶轨迹数据集&#xff0c;它通过深入挖掘自然驾驶记录中的密集互动事件而构建。 InterHub 的特点在于其形式化的方法&#xff0c;这使得数据集能够精确描述和提取多智能体之间的互动事件&#xff0c;揭示了现有自动驾驶解决方案的局限…

VSCode修改资源管理器文件目录树缩进(VSCode目录结构、目录缩进、文件目录外观)workbench.tree.indent

文章目录 方法点击左下角小齿轮点击设置点击工作台&#xff0c;点击外观&#xff0c;找到Tree: Indent设置目录树的缩进 方法 点击左下角小齿轮 点击设置 点击工作台&#xff0c;点击外观&#xff0c;找到Tree: Indent设置目录树的缩进 "workbench.tree.indent"默认…

idea 自动导包,并且禁止自动导 *(java.io.*)

自动导包配置 进入 idea 设置&#xff0c;可以按下图所示寻找位置&#xff0c;也可以直接输入 auto import 快速定位到配置。 Add unambiguous imports on the fly&#xff1a;自动帮我们优化导入的包Optimize imports on the fly&#xff1a;自动去掉一些没有用到的包 禁止导…

阅读笔记--知识蒸馏

1.一些基本概念 教师模型&#xff08;Teacher Model&#xff09;&#xff1a;预训练复杂神经网络&#xff0c;高精度&#xff0c;计算存储开销大。学生模型&#xff08;Student Model&#xff09;&#xff1a;简单参数少推理快的模型&#xff0c;目标从教师模型获取知识&#…

永磁同步电机谐波抑制算法(11)——基于矢量比例积分调节器(vector PI controller,VPI controller)的谐波抑制策略

1.前言 相比于传统的谐振调节器&#xff0c;矢量比例积分调节器&#xff08;vector PI controller&#xff0c;VPI controller&#xff09;多一个可调零点&#xff0c;能够实现电机模型的零极点对消。因此VPI调节器也被广泛应用于交流控制/谐波抑制中。 2.参考文献 [1] A. G…

你还没有将 Siri 接入GPT对话功能吗?

由于各种原因&#xff0c;国内ios用户目前无缘自带 AI 功能&#xff0c;但是这并不代表国内 ios 无法接入 AI 功能&#xff0c;接下来手把手带你为iPhone siri 接入 gpt 对话功能。 siri 接入 chatGPT 暂时还无法下载 ChatGPT app&#xff0c;或者没有账号的读者可以直接跳到…

【Point-LIO】基于Ubuntu20.04的ROS1平台的Point-LIO部署Mid-360激光雷达

0、前言 1、代码拉取 2、代码编译运行 文件结构 编译流程&#xff1a; 1、先编译livox_ros_driver2 2、编译整个工程文件 3、运行launch文件&#xff08;livox_ros_driver2&#xff09; 成功启动&#xff1a; 3、实物运行 看得出来&#xff0c;在rviz出了问题&am…

使用 Monaco Editor 实现 ECharts 变量使用功能

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

实验七 用 MATLAB 设计 FIR 数字滤波器

实验目的 加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。 学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。 了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。 掌握 FIR 滤波器的快速卷积实现原理。 不同滤波器的设计方法具有不同的优…

泷羽sec-burp功能介绍(1) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

Unity 模拟百度地图,使用鼠标控制图片在固定区域内放大、缩小、鼠标左键拖拽移动图片

效果展示&#xff1a; 步骤流程&#xff1a; 1.使用的是UGUI&#xff0c;将下面的脚本拖拽到图片上即可。 using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;public class CheckImage : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragH…

Wend看源码-Durid

项目地址 GitHub - alibaba/druid: 阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品&#xff0c;为监控而生的数据库连接池 简介 Druid连接池是阿里巴巴开源的数据库连接池项目&#xff0c;自2011年开源以来&#xff0c;它因其卓越的…

基于单片机的WIFI、语音、储存、时钟、闹钟、定位系统

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DS1302时钟模块&#xff0c;通过LCD1602显示实时时间&#xff0c;也可以储存时间在AT2DC02中&#xff0c…

什么是GAN?

一、基本概念 生成对抗网络&#xff08;Generative Adversarial Network&#xff0c;GAN&#xff09;是一种由两个神经网络共同组成深度学习模型&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;。这两个网络通过对抗的方式…

RNN And CNN通识

CNN And RNN RNN And CNN通识一、卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;1. 诞生背景2. 核心思想和原理&#xff08;1&#xff09;基本结构&#xff1a;&#xff08;2&#xff09;核心公式&#xff1a;&#xff08;3&#xff09;关…

【数据事务】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

南昌大学(NCU)羽毛球场地预约脚本

在冬天进行羽毛球运动是一个很好的选择&#xff0c;它能帮助你保持身体活力&#xff0c;增强心肺功能&#xff0c;并促进血液循环。但是室友和师弟师妹反应&#xff0c;学校的羽毛球场地有限&#xff0c;手速慢的根本预约不到场地。 中午12&#xff1a;00准时开放预约&#xff…

三种方式(oss、本地、minio)图片的上传下载

一、OSS 1、前期准备 1.1 注册阿里云账号&#xff0c;开启对象存储oss功能&#xff0c;创建一个bucket&#xff08;百度教程多的是&#xff0c;跟着创建一个就行&#xff0c;创建时注意存储类型是标准存储&#xff0c;读写权限是公共读&#xff09; 有的在创建桶时读写属性是…

关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置说明

最近项目中用到关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置&#xff0c;总结了一下说明&#xff1a; 1、后端是spring boot工程&#xff0c;端口8000&#xff0c;通过 jar命令启动 nohup java -jar xxx-jsonflow-biz.jar > /usr/local/nohup.out 2>…