数组Arrays,排序算法,String类,Stringbulider,正则表达式

news2024/9/23 1:24:40

## 数组

排序

经典的三大排序:冒泡,选择,插入

(一)冒泡排序核心:数组中的 相邻 两项比较,交换(正序or倒序)

正序原理图:在这里插入图片描述
在这里插入图片描述
代码实现:

    public static void sort(int[] a){
        for (int i = 0; i < a.length; i++) {
            //i < a.length-1 也可以
            for (int j = 0; j < a.length-i-1; j++) {
                //-1防止数组越界
                if (a[j]>a[j+1]){//相邻
                    int temp = a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
            }
        }
    }

问题:如果数组本身有序,依然进行大量比较,但没有排序交换。

做一个开关判断

package com.ffyc.Sort;

/**
 * 冒泡排序--"相邻"
 */
public class BubbleSortDemo {

    public static void sort(int[] a){
        for (int i = 0; i < a.length; i++) {//控制冒泡排序次数
            //a.length-1 也可以
            boolean f= true;//开关
            for (int j = 0; j < a.length-i-1; j++) {
                //-1防止数组越界 -i相当于优化了一下下
                if (a[j]>a[j+1]){//相邻
                    f=false;

                    int temp = a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
            }
        }
            if (f) break;
    }
}
public static void print(int[] a){
        for (int t : a){
            System.out.print(t+"\t");
        }
}

    public static void main(String[] args) {
        int[] a = {1,2,3,6};
        sort(a);
        print(a);
    }
}

(二)选择排序

核心:一次循环找出最大/小值

原理图:
在这里插入图片描述

代码:
在这里插入图片描述

//优化:减少交换次数

package com.ffyc.Sort;

/**
 * 选择排序
 */

public class SelectSortDemo {
    public static void sort(int[] a){
        for (int i = 0; i < a.length; i++) {
            int min = a[i];
            int pos = i;
            for (int j = i+1 ;j <a.length ; j++) {
                if (min > a[j]){//不是最小值
                    min = a[j];
                    pos = j;//j是最小值的下标位置
                }
            }
            //找到最小值之后进行交换
            a[pos]=a[i];
            a[i]=min;

        }
    }
    public static void print(int[] a){
        for (int t : a){
            System.out.print(t+"\t");
        }
    }
    
    
    public static void main(String[] args) {
        int [] a= {4,3,6,1,8};
        sort(a);
        print(a);
    }
}

常规和优化耗时比较:

 public static void sort(int[] a) {//优化
        long s1 = System.nanoTime();
        for (int i = 0; i < a.length; i++) {
            int min = a[i];
            int pos = i;
            for (int j = i + 1; j < a.length; j++) {
                if (min > a[j]) { //不是最小值
                    min = a[j];
                    pos = j;  //j是最小值位置
                }
            }
            //找到最小值之后进行交换
            a[pos] = a[i];
            a[i] = min;

        }
        long s2 = System.nanoTime();
        System.out.println("耗时1: " + (s2 - s1));
    }

    public static void sortx(int[] a) {//原始
        long s1 = System.nanoTime();
        for (int i = 0; i < a.length; i++) {
            int min = a[i];

            for (int j = i + 1; j < a.length; j++) {
                if (min > a[j]) { //不是最小值
                    min = a[j];
                    a[j] = a[i];
                    a[i] = min;
                }
            }
        }
        long s2 = System.nanoTime();
        System.out.println("耗时x: " + (s2 - s1));
    }

(三)插入排序–联想“打扑克”

覆盖过程
在这里插入图片描述在这里插入图片描述
希尔排序

bigO表示法

O(n)

O(1)

在这里插入图片描述

O(n)

取平均,去掉常数;O(n/2+1)==》O(n)

在这里插入图片描述

O(n^2)

不一样是O(n*m)

空间复杂度稳定,

在这里插入图片描述
循环分开实现O(2n),比嵌套的效率高O(n2)–>O(n)<O(n2)

数组辅助类:Arrays

数组转换为字符串

Arrays**.toString**(数组)–>字符串

fill

填充,和sort一样可以选择范围

equals

在这里插入图片描述

copyof

数组拷贝

binarySearch

二分查找(前提:有序)

在这里插入图片描述

结果<0 ===》 代表没找到

在这里插入图片描述

数组删除问题

在这里插入图片描述

Arrays.copyOfRange 是Java中的一个数组操作方法,它用于复制指定数组的指定范围的元素到一个新数组中。这个方法的详细用法和示例如下:

[Arrays.copyOfRange) 用法:左闭右开

javapublic static int[] copyOfRange(int[] original, int from, int to)

参数说明:

  • original:要复制的原始数组。
  • from:复制的起始索引(包含)。
  • to:复制的结束索引(不包含)。
  • 注:数组位置从0开始,length不是最后一个,length-1是最后一个。

多维数组(二维)

本质:一维数组——看作一张表,行-列,坐标

一维数组

紧紧相连,不断开;断开就成链表了

在这里插入图片描述

二维数组

定义:一维数组的元素是一个一维数组。

在这里插入图片描述

int [][] a = new int[5][];//false	
int [][] a = new int[][5];//true

java需要确定的是行(一维数组)。

在这里插入图片描述

打印:

​ String[] ball = {“●”, “○”};

在这里插入图片描述

String——第九大类型

能够使用String,char[];String不是基本类型

在这里插入图片描述

字符串

本质是字符数组

在这里插入图片描述

字符串长度获取

str.length

字符串和字符数组的转换

在这里插入图片描述

问题:有一个字符串“apple”,统计出现次数最多的字符。

桶排序

在这里插入图片描述

Api==》接口(别人写好的)

常用的几个(Application Programming Interface)

  1. trim:常用于从用户输入中去除(第一个字符之前的空格,最后一个字符之后空格)不必要的空格,或者验证输入是否为空。

  2. toUppercase:转大写

  3. toLowcase:转小写

  4. c1.equalsIgnoreCase(c2));//忽略大小写比较

  5. (String)s.charAt(i); //取字符串中的单个字符

  6. ​ s.substring(startIndex,endIndex) : 截取字符串,[左闭右开)

  7. ​ s.spilt(字符串) : 分割字符串

  8. 如果忘了:ctrl+o 找你要用的
    

indexOf()/lastIndexOf()/replace()

  1. indexOf() 方法用于在字符串中查找指定子字符串第一次出现的位置,并返回其索引。如果未找到子字符串,则返回 -1。
  2. lastIndexOf() 方法与 indexOf() 类似,但它是从字符串末尾开始搜索指定子字符串最后一次出现的位置。
  3. replace() 方法用于在字符串中用一个新的子字符串替换匹配的子字符串(或者使用正则表达式替换)。
  • indexOf()lastIndexOf() 用于查找字符串中的子字符串,并返回其索引或者 -1(未找到)。
  • replace() 用于将字符串中的指定子字符串(或者匹配的正则表达式)替换为新的子字符串。

解析-xxx-之间的信息

法一
package com.ffyc.string;

public class StringApiDemo04 {
    public static void main(String[] args) {
        String str = "001-脱缰凯-男-16-班长-555.00";
        int s1 = str.indexOf("-");
        int s2 = str.indexOf("-", s1 + 1);
        int s3 = str.indexOf("-", s2 + 1);
        int s4 = str.indexOf("-", s3 + 1);
        int s5 = str.lastIndexOf("-");
        //解析 名字
        String s0 = str.substring(0, s1);//[截取字符)001
        System.out.println(s0);
        String s = str.substring(s1+1, s2);//[截取字符)
        System.out.println(s);
        String ss = str.substring(s2+1, s3);//[截取字符)
        System.out.println(ss);
        String sss = str.substring(s3+1, s4);//[截取字符)
        System.out.println(sss);
        String ssss = str.substring(s4+1, s5);//[截取字符)
        System.out.println(ssss);

        //解析 薪水

        String sal = str.substring(s5+1);
        System.out.println(sal);
        //递归


    }
}

在这里插入图片描述

法二 的 函数
    public static void parsex(String str){
        String[] split = str.split("-");
        for (String s : split) {
            System.out.println(s);
        }
    }
法三函数
    public static void parse(String str){
        while (true) {
            int index = str.indexOf("-");
            if (index<0){
                System.out.println(str);
                break;
            }
            System.out.println(str.substring(0,index));
            str = str.substring(index+1);
        }
    }

常用的API总结

编号API解释
1.length长度
2.substring(m,n)截取
3.toUpperCase()大写
4.toLowerCase()小写
5.equals()等于
6.indexOf()子字符串位置
7.trim()去空格
8.replace()替换
9.lastIndexOf()从后向前
10.spilt()分割
11.toCharArrays()数组
12.charAt()某位的字符
13.valueOf()将其他类型转换为字符串
14.endWith()以".jpg"结尾
15.statrWith()以什么开头
16.isEmpty()为空
17.contains()是否存在
18new String(“abc”)产生一个字符串
19.replaceAll()替换所有

在这里插入图片描述

String包

在java.lang包——不用引入

压缩软件可以打开包(文件夹)

(D:)>dev>jdk8>jre >lib >

在这里插入图片描述

完全限定名 就近原则String–》解决用这个完全限定名(下面的黄字打错了)

在这里插入图片描述

import

在这里插入图片描述

package

在这里插入图片描述

在这里插入图片描述

转换为字符串

+

在这里插入图片描述

valueof

在这里插入图片描述

注意区分“拼接”与“运算”
endwith/startwith

在这里插入图片描述

isEmpty 的空 --内容空
  1. 对象存在,里面(内容为空)没有字符 --isEmpty,返回t/f
  2. 对象不存在 --null
    在这里插入图片描述

sum:在这里插入图片描述

产生一个字符串

在这里插入图片描述

下面的是java正常使用的方法,上面是人们简写后的

问题

在这里插入图片描述

???


正则表达式

问题提出

判断一个数全部是数字

在这里插入图片描述

问题解决

写一个表达式按规则完成对字符串的判定过程

在这里插入图片描述

应用场景

身份证
电话号码
邮箱
用户名、密码·

对字符串的特殊要求—— 电话号:1xx 4343

基本表达式

一个【】只匹配一次

匹配一个数字

异或号^ :不是xxx,表示非

[^0-9]//不是0~9的所有字符

match匹配

匹配一个字母

[a-z]

判断是否是中文

[\u4e00-\u9fa5]

package com.ffyc.Regex;

/**
 * 正则表达式——单字符判断
 */
public class RegexDemo02 {
    public static void main(String[] args) {
        String s = "a";
        String n = "1";
        String regex = "[a-zA-Z]";//[]里的多个只代表一个


        System.out.println(s.matches(regex));
        System.out.println(n.matches(regex));

        //判断是否是中文 4e00~9fa5
        String chinese = "中";
        String reg = "[\u4e00-\u9fa5]";//- 表示一个范围
        System.out.println(chinese.matches(reg));
    }
}

任意字符表示——.(不加【】)

在这里插入图片描述

//true

匹配多个字符{n}

在这里插入图片描述

n:要匹配的个数,精确匹配n次

{m,n}:从m倒n位匹配

{m,}

在这里插入图片描述

+:至少有一次匹配

?:要么零次要么一次

问题:客户输入一个数字(浮点型,整形)

12,6565.448

问题:网站要求使用者年龄范围在18~60之间

客户:21 true

客户: 17 false

|:或者

package com.ffyc.Regex;

/**
 * 18-60
 */
public class RegexPro01 {
    public static void main(String[] args) {

        String str = "19";
        /*
        分组-------------
        |:或者
        1.(18,19)
        2.(2 3 4 5 )(0-9)
        3.60
         */
        String regex = "(1[8-9])|[2-5][0-9]|(60)";
        System.out.println(str.matches(regex));
    }
}

问题:输入一个合法电话号码

1开头 ;3/8/9在第二位 ;后面几位随意

String+正则

spilt()

在这里插入图片描述

replaceAll()

在这里插入图片描述

String问题

本质-源代码-是字符数组–final–是不可以变的
在这里插入图片描述

String s = Str.substring(0,5);//str,s
str = str.substring(0,5);

慢、

在这里插入图片描述

StringBuilder 快

删9

在这里插入图片描述

回文

在这里插入图片描述

StringBuilder版回文

在这里插入图片描述

改成: 在这里插入图片描述

reverse()

字符串反转

在这里插入图片描述

toString()

转换为字符串形式

力扣344 暴力法

在这里插入图片描述

源码
在这里插入图片描述

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

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

相关文章

jmeter 重试机制

一、功能实现 我们在测试过程中&#xff0c;请求接口可能是因为请求超时&#xff0c;或者接口异常失败&#xff0c;导致整个测试链路验证失败&#xff0c;jmeter重试机制&#xff0c;这个时候就可以避免上述问题发生 二、配置 1、添加线程组 首先&#xff0c;确保你已经在测…

Python | Leetcode Python题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; # The isBadVersion API is already defined for you. # def isBadVersion(version: int) -> bool:class Solution:def firstBadVersion(self, n: int) -> int:left, right 1, nwhile left < right:mid left (right - left) //…

power bi条件判断函数

power bi条件判断函数 1. iferror函数2. if 函数3. switch函数4. hasonefilter函数5. hasonevalue函数6. selectedvalue函数 1. iferror函数 遇到错误时使用指定数值替换注意&#xff1a;替换的必须是数值例子列 [销售数量]*[单价] 列 iferror([销售数量]*[单价],0) 列 ife…

昇思25天学习打卡营第17天|计算机视觉

昇思25天学习打卡营第17天 文章目录 昇思25天学习打卡营第17天ShuffleNet图像分类ShuffleNet网络介绍模型架构Pointwise Group ConvolutionChannel ShuffleShuffleNet模块构建ShuffleNet网络 模型训练和评估训练集准备与加载模型训练模型评估模型预测 打卡记录 ShuffleNet图像分…

自学Java第11Day

学习目标&#xff1a;面向对象进阶 学习内容&#xff1a;包、final、权限修饰符、代码块、抽象类、接口 学习时间&#xff1a; 下午 3 点-下午 6 点 学习产出&#xff1a; 什么的包&#xff1f; 包就是文件夹。用来管理各种不同功能的Java类&#xff0c;方便后期代码维护。 包…

【Go系列】Go的UI框架Fyne

前言 总有人说Go语言是一门后端编程语言。 Go虽然能够很好地处理后端开发&#xff0c;但是者不代表它没有UI库&#xff0c;不能做GUI&#xff0c;我们一起来看看Go怎么来画UI吧。 正文 Go语言由于其简洁的语法、高效的性能和跨平台的编译能力&#xff0c;非常适合用于开发GUI…

爬虫学习1:初学者简单了解爬虫的基本认识和操作(详细参考图片)

爬虫 定义&#xff1a;爬虫&#xff08;Web Crawler 或 Spider&#xff09;是一种自动访问互联网上网页的程序&#xff0c;其主要目的是索引网页内容&#xff0c;以便搜索引擎能够快速检索到相关信息。以下是爬虫的一些关键特性和功能&#xff1a; 自动化访问&#xff1a;爬虫能…

58、主从复制数据库+读写分离

mysql的主从复制和读写分离&#xff08;面试问原理&#xff09; mysql的主从复制和读写分离&#xff1a; 主从复制 面试必问 主从复制的原理。 读写分离&#xff0c;MHA 一、主从复制 1.1、主从复制的模式&#xff1a; 1、mysql的默认模式&#xff1a; 异步模式&#xf…

centos系统mysql数据库差异备份与恢复

文章目录 差异备份mysql数据一、 安装 Percona XtraBackup数据库中创建一些数据三、创建全备份四、创建差异备份1. 在数据库中添加数据&#xff0c;让数据发生一些改变2. 创建第一个差异备份3. 数据库中再次添加一些数据4. 创建第二个差异备份 五、模拟数据丢失&#xff0c;删库…

MongoDB 学习笔记

一、简介 1、MongoDB 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 2、数据看是什么 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的应用程序。 3、数据库的作用 主要作用是 管理数据…

Data Analytics for Business BISM7233

SSIS Task: Company_data.csv contains information for each of the companies, some of the state code information is missing in this table. You would need to use “state_code.csv” to fill in these blank cells under state code before creating the company dime…

利用OSMnx求路网最短路径并可视化(二)

书接上回&#xff0c;为了增加多路径的可视化效果和坐标匹配最近点来实现最短路可视化&#xff0c;我们使用图形化工具matplotlib结合OSMnx的绘图功能来展示整个路网图&#xff0c;并特别高亮显示计算出的最短路径。 多起终点最短路路径并计算距离和时间 完整代码#运行环境 P…

vite环境下使用bootstrap

环境 nodejs 18 pnpm 初始化 pnpm init pnpm add -D vite --registry http://registry.npm.taobao.org pnpm add bootstrap popperjs/core --registry http://registry.npm.taobao.org pnpm add -D sass --registry http://registry.npm.taobao.org新建vite.config.js cons…

【微服务】Spring Cloud Bus的注意事项和常用案例

文章目录 强烈推荐引言关键方面注意事项1. 消息代理选择2. 消息队列配置3. 消息持久化4. 幂等性5. 安全性6. 消息大小7. 性能监控8. 错误处理9. 版本兼容性10. 测试11. 配置同步12. 日志记录 常用示例示例 1: 配置同步配置服务器 (config-server)客户端服务 (client-service)触…

数据库的事务隔离级别有哪些?

并行事务会引发什么问题&#xff1f; 同时处理多个事务的时候&#xff0c;就可能出现脏读&#xff08;dirty read&#xff09;、不可重复读&#xff08;non-repeatable read&#xff09;、幻读&#xff08;phantom read&#xff09;的问题。脏读: 如果一个事务「读到」了另一个…

MQ消息队列+Lua 脚本实现异步处理下单流程,将同步下单改为异步下单

回顾一下下单流程&#xff1a; 用户发起请求 会先请求Nginx,Nginx反向代理到Tomcat&#xff0c;而Tomcat中的程序&#xff0c;会进行串行工作&#xff0c; 分为以下几个操作&#xff1a; 1 查询优惠券 2 判断秒杀库存是否足够 3 查询订单 4 校验是否是一人一单 5 扣减库…

Unity Shader - 2024 工具篇

目录 IDE 工具建议 IDE工具 Sublime 3 大势所趋&#xff0c;但是Sublime 使用插件还是相当的不习惯 代码跳转 Go to definite IDE 工具建议 () what is the best ide for coding shaderlab - #4 by DaveAstator - Unity Engine - Unity Discussions​​​​​​​I IDE工…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger&#xff1f; 二.Swagger的使用操作流程&#xff1a; 1.在pom.xml配置文件导入 Knife4j 的依赖&#xff1a; 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射&#xff08;否则接口文档无法访问&#xff09;&#xff1a; 三.Swagger的四个…

案例研究|柯尼卡美能达软件开发(大连)有限公司基于DataEase构筑内部数据可视化体系

柯尼卡美能达软件开发&#xff08;大连&#xff09;有限公司于2007年5月25日注册成立。公司以“洞悉在工作的人们真实情况&#xff0c;探寻他们的愿望&#xff0c;持续提供使人们更加幸福的服务”为使命&#xff0c;致力于系统品质测试服务、软件开发服务、IT安全服务、高级BPO…

docker文件挂载和宿主主机文件的关系

一、背景 在排查docker日志时发现在读取docker的文件时找不到文件&#xff0c;在宿主主机上可以查到对应的文件。这里就要理解docker文件目录和宿主主机上的文件的关系。 二、Docker文件系统和宿主系统 Docker文件和宿主文件之间的关系主要体现在Docker容器的运行环境中。Docke…