基础常问 (概念、代码)

news2025/4/4 6:56:46

读源码

 

代码

        Void方法 ,也可以提前rerun;结束 

RandomAccessFile类(随机访问文件)

在 Java 中,可以使用RandomAccessFile类来实现文件指针操作。RandomAccessFile提供了对文件内容的随机访问功能,它的文件指针可以通过seek方法来设置。

例如,假设你有一个文件,想要从指定的偏移量(offset)处开始读取内容。以下是一个简单的示例代码:

import java.io.File;

import java.io.IOException;

import java.io.RandomAccessFile;



public class FileOffsetExample {

    public static void main(String[] args) {

        try {

            File file = new File("example.txt");

            RandomAccessFile raf = new RandomAccessFile(file, "r");

            long offset = 10; // 假设从第10个字节开始读取

            raf.seek(offset);

            byte[] buffer = new byte[100];

            int bytesRead = raf.read(buffer);

            String content = new String(buffer, 0, bytesRead);

            System.out.println(content);

            raf.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }}

  • 在这个示例中,RandomAccessFile的seek方法用于将文件指针移动到指定的偏移量offset处。然后,通过read方法读取从该偏移量开始的内容。

理解文件指针的移动方式

  • 当你使用seek方法时,它会根据传入的偏移量来定位文件指针。偏移量是从文件开头开始计算的字节数。如果偏移量为 0,文件指针就位于文件的开头;如果偏移量大于文件的长度,根据RandomAccessFile的打开模式,可能会抛出IOException(在写模式下可能会扩展文件长度)。
  • 例如,如果你想在文件末尾添加内容,可以先将文件指针移动到文件的末尾,再进行写入操作。代码如下:

import java.io.File;

import java.io.IOException;

import java.io.RandomAccessFile;

public class AppendToFileExample {

    public static void main(String[] args) {

        try {

            File file = new File("example.txt");

            RandomAccessFile raf = new RandomAccessFile(file, "rw");

            raf.seek(raf.length()); // 将文件指针移到文件末尾

            String contentToAppend = "This is appended content.";

            raf.write(contentToAppend.getBytes());

            raf.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }}

在这个示例中,raf.length()返回文件的当前长度,将文件指针移动到这个位置后,就可以在文件末尾写入新的内容。

Java实现一下密码长度不能大于 20 位,且其中任意挨着的 5 位不能相同且不能连续。

isValidPassword方法首先检查密码长度是否超过 20 位。

然后,它遍历密码字符串,每次取 5 个连续字符,检查这 5 个字符是否都相同以及是否连续。

如果发现不符合条件的情况,就返回false,如果整个遍历过程都没有问题,则返回true。在main方法中给出了一些测试示例。请注意,对于字符连续的检查假设了简单的编码连续情况,如果密码包含更复杂的字符集可能需要更精细的判断方法。

japublic class PasswordValidator {

    public static boolean isValidPassword(String password) {

        if (password.length() > 20) {

            return false;

        }

        for (int i = 0; i <= password.length() - 5; i++) {

            String fiveChars = password.substring(i, i + 5);

            // 检查是否有连续相同的5位字符

            boolean allSame = true;

            for (int j = 1; j < 5; j++) {

                if (fiveChars.charAt(j)!= fiveChars.charAt(0)) {

                    allSame = false;

                    break;

                }

            }

            if (allSame) {

                return false;

            }

// 检查是否连续(这里假设字符编码是连续的,对于ASCII码数字和字母可以这样简单判断)

            boolean isConsecutive = true;

            for (int j = 0; j < 4; j++) {

                if ((int) fiveChars.charAt(j + 1) - (int) fiveChars.charAt(j)!= 1) {

                    isConsecutive = false;

                    break;

                }

            }

            if (isConsecutive) {

                return false;

            }

        }

        return true;

    }



    public static void main(String[] args) {

        System.out.println(isValidPassword("abcdefghijklmnopqrst"));

        System.out.println(isValidPassword("aaaaabbbbbcccccd"));

        System.out.println(isValidPassword("abcde12345fghij"));

    }}

冒泡算法-快排算法

  public static void bubbleSort(int[] array) {

        int n = array.length;

        for (int i = 0; i < n - 1; i++) {

            for (int j = 0; j < n - i - 1; j++) {

                //>  升序

                //<  降序

                if (array[j] > array[j + 1]) {

                    // 交换元素

                    int temp = array[j];

                    array[j] = array[j + 1];

                    array[j + 1] = temp;

                }

            }

        }

    }



    public static void main(String[] args) {

        int[] array = {5, 3, 8, 6, 4};

        bubbleSort(array);

        for (int value : array) {

            System.out.print(value + " ");

        }

}

        //冒泡排序的时间复杂度为O(n*n)      

快速排序算法是一种时间复杂度为O(nlogn)的排序算法

算法思想:用数组的第一个数作为基准数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。

Java中的String有没有长度限制

String s = "xxx";定义String的时候,xxx被我们称之为字面量,这种字面量在编译之后会以常量的形式进入到Class常量池。因为要进入常量池,就要遵守常量池的有关规定。

字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过65535,并且在javac执行过程中控制了最大值为65534。

在运行期,长度不能超过Int的范围,否则会抛异常

String s = new String(xyz) 创建了几个对象

String str = new String(“abc”); 至少会创建一个对象,也有可能创建两个

因为用到new关键字,肯定会在堆中创建一个String对象,

如果字符池中已经存在”abc”, 则不会在字符串池中创建一个String对象,

如果不存在,则会在字符串常量池中也创建一个对象。

字符串常量池

jvm为了提升性能和减少内存开销,避免字符的重复创建,其维护了一块特殊的内存空间,

即字符串池,当需要使用字符串时,先去字符串池中查看该字符串是否已经存在,

如果存在,则可以直接使用,如果不存在,初始化,并将该字符串放入字符创常量池中。



        int a = 2;

        Integer b = 2;

        Integer c = new Integer(2);

        //true



        System.out.println(a == b);

        //告警 包装类型相等用equals替换



        // System.out.println(b == c);



        String x = "abc";

        String y = "a" + "bc";

        //true ,拼接之后y还是abc,所以还是会指向字符串常量池的内存地址

        System.out.println(x == y);





        String z = new String("abc");

        //false

        System.out.println(y == z);







String str1 = "hello";

String str2 = "he" + new String("llo");

System.out.println(str1 == str2);  false



String str = "abc";

String str1 = "abc";

String str2 = "abc";

System.out.println(str==str1);//true

System.out.println(str==str2);//true

也就是str、str1、str2都是指向同一个内存地址。





String str = "abc";     //在常量池中创建abc

String str1 = "abcd";  //在常量池中创建abcd

String str2 = str+"d";    

//拼接字符串,此时会在堆中新建一个abcd的对象,

因为str2编译之前是未知的

String str3 = "abc"+"d";  //拼接之后str3还是abcd,所以还是会指向字符串常量池的内存地址

System.out.println(str1==str2);//false

System.out.println(str1==str3);//true

String str = “abc”;  可能创建一个或者不创建对象

如果”abc”在字符串池中不存在,会在java字符串池中创建一个String对象(”abc”),

然后str指向这个内存地址,无论以后用这种方式创建多少个值为”abc”的字符串对象,

始终只有一个内存地址被分配。

总结:==判断的是对象的内存地址,而equals判断的是对象内容

项目中还是不要使用new String去创建字符串,最好使用String直接赋值

String直接赋值与使用new String的区别_new string和直接赋值的区别-CSDN博客

String 和 StringBuffer,StringBuilder 的区别 - JohnieCheng - 博客园

xie.infoq.cn/article/9ff230e91d0ec22f705c4c8f4

面试题整理:Error与Exception的区别_面试题error和exception的区别-CSDN博客

== equals 区别

==比较的是变量栈内存中存放的堆内存地址,看它们是否是同一对象。(常量池问题->10、10L、10.0 相同)

Equal 用来比较两个对象的值是否相等,由于所有的类都继承自Object类,所以适用于所有对象,如果没有对该方法重写进行覆盖,调用仍然是Object类的方法,Object  中equals方法返回的却是==判断。常量写在前面,避免报空指针。

  1. equals 是object类方法,而 == 是操作符;
  2. 对于基本类型的变量来说(如 short、 int、 long、 float、 double),只能使用 == ,

因为这些基本类型的变量没有 equals 方法。对于基本类型变量的比较,使用 == 比较,

   一般比较的是它们的值。

  1. 对于引用类型的变量来说(例如 String 类)才有 equals 方法

因为 String 继承了 Object   类,equals 是 Object 类的通用方法。

对于该类型对象的比较,

默认情况下,没有复写 Object 类的 equals 方法,

使用 == 和 equals 比较是一样效果的

都是比较的是它们在内存中的存放地址。但是对于某些类来说,为了满足自身业务需求,

可能存在 equals 方法被复写的情况使用 equals 方法会比较它们的值

注意:

所有比较是否相等时,Equals对常量比较时,把常量写在前面

因为使用object的 equals object 可能为有null指针。

基本类型比较,那么只能用==来比较,不能用equals ,如果是基本类型的包装类型,那么用equals

== 和 equals 的区别是什么?-腾讯云开发者社区-腾讯云

待更新

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

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

相关文章

J1 ResNet-50算法实战与解析

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習紀錄博客&#x1f356; 原作者&#xff1a;K同学啊 | 接輔導、項目定制 一、理论知识储备 1. 残差网络的由来 ResNet主要解决了CNN在深度加深时的退化问题&#xff08;梯度消失与梯度爆炸&#xff09;。 虽然B…

[MySQL初阶]MySQL(8)索引机制:下

标题&#xff1a;[MySQL初阶]MySQL&#xff08;8&#xff09;索引机制&#xff1a;下 水墨不写bug 文章目录 四、从问题到底层&#xff0c;从现象到本质1.为什么插入的数据默认排好序2.MySQL的Page&#xff08;1&#xff09;为什么选择用Page&#xff1f;&#xff08;2&#x…

Muduo网络库实现 [九] - EventLoopThread模块

目录 设计思路 类的设计 模块的实现 私有接口 公有接口 设计思路 我们说过一个EventLoop要绑定一个线程&#xff0c;未来该EventLoop所管理的所有的连接的操作都需要在这个EventLoop绑定的线程中进行&#xff0c;所以我们该如何实现将EventLoop和线程绑定呢&#xff1f;…

《K230 从熟悉到...》识别机器码(AprilTag)

《K230 从熟悉到...》识别机器码&#xff08;aprirltag&#xff09; tag id 《庐山派 K230 从熟悉到...》 识别机器码&#xff08;AprilTag&#xff09; AprilTag是一种基于二维码的视觉标记系统&#xff0c;最早是由麻省理工学院&#xff08;MIT&#xff09;在2008年开发的。A…

栈和队列的概念

1.栈的概念 只允许在固定的一端进行插入和删除&#xff0c;进行数据的插入和数据的删除操作的一端数栈顶&#xff0c;另一端称为栈底。 栈中数据元素遵循后进先出LIFO (Last In First Out) 压栈&#xff1a;栈的插入。 出栈&#xff1a;栈的删除。出入数据在栈顶。 那么下面…

红日靶场一实操笔记

一&#xff0c;网络拓扑图 二&#xff0c;信息搜集 1.kali机地址&#xff1a;192.168.50.129 2.探测靶机 注&#xff1a;需要win7开启c盘里面的phpstudy的服务。 nmap -sV -Pn 192.168.50.128 或者扫 nmap -PO 192.168.50.0/24 可以看出来win7(ip为192.168.50.128)的靶机开…

【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解前言YOLOV2的模型结构YOLOV2模型的基本执行流程YOLOV2模型的网络参数YOLOV2模型的训练方式 YOLOV2的核心思想前向传播阶段反向传播阶段 总结 前…

NineData云原生智能数据管理平台新功能发布|2025年3月版

本月发布 15 项更新&#xff0c;其中重点发布 3 项、功能优化 11 项、性能优化 1 项。 重点发布 基础服务 - MFA 多因子认证 新增 MFA 多因子认证&#xff0c;提升账号安全性。系统管理员开启后&#xff0c;所有组织成员需绑定认证器&#xff0c;登录时需输入动态验证码。 数…

GLSL(OpenGL 着色器语言)基础语法

GLSL&#xff08;OpenGL 着色器语言&#xff09;基础语法 GLSL&#xff08;OpenGL Shading Language&#xff09;是 OpenGL 计算着色器的语言&#xff0c;语法类似于 C 语言&#xff0c;但提供了针对 GPU 的特殊功能&#xff0c;如向量运算和矩阵运算。 着色器的开头总是要声明…

Redis基础知识-3

RedisTemplate对多种数据结构的操作 1. String类型 示例代码&#xff1a; // 保存数据 redisTemplate.opsForValue().set("user:1001", "John Doe"); // 设置键值对&#xff0c;无过期时间 redisTemplate.opsForValue().set("user:1002", &qu…

unity各个面板说明

游戏开发&#xff0c;unity各个面板说明 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性&#xff0c;希望对您有用~ unity简介-unity基础…

游戏引擎学习第199天

回顾并发现我们可能破坏了某些东西 目前&#xff0c;我们的调试 UI 运行得相对顺利&#xff0c;可以创建可修改的调试变量&#xff0c;也可以插入分析器&#xff08;profiler&#xff09;等特殊视图组件&#xff0c;并进行一些交互操作。然而&#xff0c;在上一次结束时&#…

Linux红帽:RHCSA认证知识讲解(十)使用 tar创建归档和压缩文件

Linux红帽&#xff1a;RHCSA认证知识讲解&#xff08;十&#xff09;使用 tar创建归档和压缩文件 前言一、归档与压缩的基本概念1.1 归档与压缩的区别 二、使用tar创建归档文件2.1 tar命令格式2.2 示例操作 三、使用tar进行压缩3.2 命令格式3.3 示例操作 前言 在红帽 Linux 系…

端到端机器学习流水线(MLflow跟踪实验)

目录 端到端机器学习流水线(MLflow跟踪实验)1. 引言2. 项目背景与意义2.1 端到端机器学习流水线的重要性2.2 MLflow的作用2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 机器学习流水线与MLflow跟踪4.1 端到端机器学习流水线4.2 MLflow跟踪实验…

相平面案例分析爱情故事

动态系统的分析可以分为三个步骤&#xff1a;第一步描述系统&#xff0c;通过语言来描述系统的特性&#xff0c;第一步描述系统&#xff0c;即通过语言来描述系统的特性&#xff1b;第二步数学分析&#xff0c;即使用数学工具对系统进行量化解析&#xff1b;第三步结果与讨论&a…

《2024年全球DDoS攻击态势分析》

从攻击态势来看&#xff0c;2024年DDoS攻击频次继续呈增长趋势&#xff0c;2024年同步增加1.3倍&#xff1b;超大规模攻击激增&#xff0c;超800Gbps同比增长3.1倍&#xff0c;累计高达771次&#xff0c;且互联网史上最大带宽和最大包速率攻击均被刷新&#xff1b;瞬时泛洪攻击…

RTC实时时钟M41T11M6F国产替代FRTC4111S

由NYFEA徕飞公司制造的FRTC4111S是一种低功耗的串行实时时钟(RTC)&#xff0c;国产直接替代ST的M41T11M6F,其具有56字节的NVRAM&#xff0c;32.768 kHz振荡器(由外部晶体控制)和RAM的前8字节用于时钟/日历功能并以二进制编码十进制(BCD)格式配置。地址和数据通过两行双向总线串…

Uni-app PDF Annotation plugin library online API examples

This article introduces the online version of the ElasticPDF API tutorial for the PDF annotation plug-in library in Uni-app projects. The API includes ① Export edited PDF data; ② Export annotations json data; ③ Reload old annotations; ④ Change files; ⑤…

SpringKafka消息发布:KafkaTemplate与事务支持

文章目录 引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优化总结 引言 在现代分布式系统架构中&#xff0c;Apache Kafka作为高吞吐量的消息系统&#xff0c;被广泛应用于事件驱动应用开发。Spring Kafka为Java开发者提供了与Kafka交互…

进行性核上性麻痹护理指南,助患者安稳生活

生活细致照料 安全保障&#xff1a;进行性核上性麻痹患者易出现平衡障碍、步态不稳&#xff0c;居家环境需格外留意安全。移除地面障碍物&#xff0c;保持通道畅通&#xff0c;在卫生间、走廊安装扶手&#xff0c;防止患者摔倒受伤。 饮食协助&#xff1a;患者常伴有吞咽困难&…