当前位置: 首页 > news >正文

【JAVA】数组练习

⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:浅谈Java
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖

数组练习

  • 1. 数组转字符串
  • 2. 数组拷贝
  • 3. 求数组中的元素的平均值
  • 4. 顺序查找数组中指定元素
  • 5. 二分查找数组中指定元素
  • 6. 数组排序(冒泡排序)
  • 7. 数组逆序

在这里插入图片描述

1. 数组转字符串

toString() :可以将Array 对象转换为字符串。

//语法格式:
arraylist.toString()

实例1:

import java.util.Arrays;//调用Arrays类,包含了常用的数组操作
public class test {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};String newArr = Arrays.toString(arr);System.out.println(newArr);}
}

🍤 运行结果:

在这里插入图片描述

实例2:

import java.util.ArrayList;
public class test {public static void main(String[] args) {// 创建一个动态数组ArrayList<String> sites = new ArrayList<>();sites.add("Runoob");sites.add("Google");sites.add("Wiki");sites.add("Taobao");System.out.println("网站列表: " + sites);// 将ArrayList转换为String类型String list = sites.toString();System.out.println("String: " + list);}

🍤 运行结果:

在这里插入图片描述

2. 数组拷贝

实例1:

import java.util.Arrays;
public class test {public static void func(){// newArr和arr引用的是同一个数组// 因此newArr修改空间中内容之后,arr也可以看到修改的结果int[] arr = {1,2,3,4,5,6};int[] newArr = arr;newArr[0] = 10;System.out.println("newArr: " + Arrays.toString(arr));
}
public static void main(String[] args) {func();}

🍤 图解:

在这里插入图片描述

🍤 运行结果:

在这里插入图片描述
实例2:使用Arrays中copyOf方法完成数组的拷贝

import java.util.Arrays;
public class test {public static void func(){int[] arr = {1,2,3,4,5,6};int[] newArr = arr;// copyOf方法在进行数组拷贝时,创建了一个新的数组// arr和newArr引用的不是同一个数组arr[0] = 1;newArr = Arrays.copyOf(arr, arr.length);System.out.println("newArr: " + Arrays.toString(newArr));}public static void main(String[] args) {func();}}

🍤 图解:

在这里插入图片描述

🍤 运行结果:


实例3:拷贝某个范围

import java.util.Arrays;
public class test {public static void func(){int[] arr = {1,2,3,4,5,6};int[] newArr = arr;int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);System.out.println("newArr2: " + Arrays.toString(newArr2));}public static void main(String[] args) {func();}
}

注: 数组当中存储的是基本类型数据时,不论怎么拷贝基本都不会出现什么问题,但如果存储的是引用数据类型,拷贝时需要考虑深浅拷贝的问题

模拟拷贝数组:

import java.util.Arrays;
public class test {//copyOf方法拷贝数组public static int[] copyOf(int[] arr) {int[] ret = new int[arr.length];for (int i = 0; i < arr.length; i++) {ret[i] = arr[i];}return ret;}public static void main(String[] args) {int[] a={1,4,5,6,9};int[] Array=copyOf(a);for(int i=0;i<Array.length;i++) {System.out.println(Array[i]);}}

🍤 运行结果:

在这里插入图片描述

3. 求数组中的元素的平均值

给定一个整型数组,求平均值

public class test {public static void main(String[] args) {int[] arr = {1,2,3,4,5};System.out.println(avg(arr));//输出:3.0}public static double avg(int[] arr) {int sum = 0;for (int x : arr) {//遍历数组sum += x;}return (double)sum / (double)arr.length;}
}

4. 顺序查找数组中指定元素

给定一个数组,再给定一个元素,找出该元素在数组中的位置。

import java.util.Scanner;
public class test {public static void main(String[] args) {int[] arr = {1,2,3,10,5,6};Scanner scanner=new Scanner(System.in);//创建一个Scanner对象int num=scanner.nextInt();//读取用户输入System.out.println(find(arr, num));}public static int find(int[] arr, int data) {for (int i = 0; i < arr.length; i++) {if (arr[i] == data) {return i;//返回下标}}return -1; // 表示没有找到}
}

🍤 运行结果:

在这里插入图片描述

5. 二分查找数组中指定元素

二分查找仅适用于有序查找

什么是有序数组?
有序分为 “升序” 和 “降序”
如 1 2 3 4 , 依次递增即为升序.
如 4 3 2 1 , 依次递减即为降序

以升序数组为例,二分查找的思路是先取中间位置的元素,然后使用待查找元素与数组中间元素进行比较:

  • 如果相等,即找到了返回该元素在数组中的下标
  • 如果小于,以类似方式到数组左半侧查找
  • 如果大于,以类似方式到数组右半侧查找

代码示例:

import java.util.Scanner;
public class test {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};System.out.print("请输入你要查找的数字:");Scanner scanner=new Scanner(System.in);//创建一个Scanner对象int num=scanner.nextInt();System.out.println(binarySearch(arr, num));}public static int binarySearch(int[] arr, int toFind) {int left = 0;int right = arr.length - 1;while (left <= right) {int mid = (left + right) / 2;if (toFind < arr[mid]) {// 去左侧区间找right = mid - 1;} else if (toFind > arr[mid]) {// 去右侧区间找left = mid + 1;} else {// 相等, 说明找到了return mid;}}// 循环结束, 说明没找到return -1;}
}

🍤 运行结果:

在这里插入图片描述

🍩随着数组元素个数越多, 二分的优势就越大

二分查找–图文详解 - 这篇文章是用C语言介绍的二分查找,虽然语言不同,但思想都是一样的,而且是以图的形式详细描述二分查找的过程,大家可以去看看~

6. 数组排序(冒泡排序)

给定一个数组,让数组升序 (降序) 排序

算法思路: 假设排升序

  1. 将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素就在数组的末尾
  2. 依次从上上述过程,直到数组中所有的元素都排列好
    在这里插入图片描述
import java.util.Arrays;public class test {
public static void main(String[] args) {int[] arr = {9,5,7,8,6,6,7};;bubbleSort(arr);//调用方法System.out.println(Arrays.toString(arr));}public static void bubbleSort(int[] arr) {for (int i = 0; i < arr.length; i++) {for (int j = 1; j < arr.length-i; j++) {//前一个与后一个比较,可能的话需要交换位置if (arr[j-1] > arr[j]) {int tmp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = tmp;}}} }
}

🍤 运行结果:

在这里插入图片描述

但是冒泡排序性能较低。在Java 中内置了更高效的排序算法:

import java.util.Arrays;public class test {public static void main(String[] args) {int[] arr = {9,5,7,8,6,6,7};Arrays.sort(arr);//升序排序System.out.println(Arrays.toString(arr));}

7. 数组逆序

给定一个数组,将里面的元素逆序排列

算法思路:
设定两个下标,分别指向第一个元素和最后一个元素,交换两个位置的元素,然后让前一个下标自增,后一个下标自减,循环继续即可。

import java.util.Arrays;public class test {public static void main(String[] args) {int[] arr = {1, 2, 3, 4};reverse(arr);System.out.println(Arrays.toString(arr));//将数组转化为字符串输出}public static void reverse(int[] arr) {int left = 0;//指向首元素int right = arr.length - 1;//指向最后一个元素while (left < right) {//交换元素位置int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;//移动下标left++;right--;}}
}

🍤 运行结果:

在这里插入图片描述


在这里插入图片描述

相关文章:

【JAVA】数组练习

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 数组练习 1. 数组转字符串2. 数组拷贝3.…...

每日一题——不同路径的数目(一)

题目 一个机器人在mn大小的地图的左上角&#xff08;起点&#xff09;。 机器人每次可以向下或向右移动。机器人要到达地图的右下角&#xff08;终点&#xff09;。 可以有多少种不同的路径从起点走到终点&#xff1f; 数据范围&#xff1a;0<n,m≤100&#xff0c;保证计算结…...

innodb的锁

一致性锁定读和一致性非锁定读 Read Committed和Repetable Read级别下采用MVCC 实现非锁定读 但在一些情况下&#xff0c;要使用加锁来保障数据的逻辑一致性 自增列 锁的算法 唯一值 MySQL 中关于gap lock / next-key lock 的一个问题_呜呜呜啦啦啦的博客-CSDN博客 RR可以通过…...

Jmeter-压力测试工具

文章目录 Jmeter快速入门1.1.下载1.2.解压1.3.运行 2.快速入门2.1.设置中文语言2.2.基本用法 Jmeter快速入门 1s内发送大量请求&#xff0c;模拟高QPS&#xff0c;用以测试网站能承受的压力有多大 Jmeter依赖于JDK&#xff0c;所以必须确保当前计算机上已经安装了JDK&#xff0…...

【KVM虚拟化环境部署】

环境部署 KVM虚拟化环境 1、装系统时手动选择安装 2、CentOS 7 最小化安装 yum install qemu-kvm qemu-img libvirt -y yum install virt-install libvirt-python virt-manager python-virtinst libvirt-client -y安装好CentOS 7后&#xff0c;去设置里面点击处理器&#x…...

030 - 定点类型(精确值)

-DECIMAL&#xff0c;NUMERIC&#xff1a; 该DECIMAL和NUMERIC 类型的存储精确的数值数据。当保留精确度很重要时&#xff0c;例如使用货币数据&#xff0c;则可以使用这些类型。在MySQL中&#xff0c;NUMERIC实现为DECIMAL&#xff0c;因此以下有关的说明DECIMAL同样适用于 NU…...

生活随笔,记录我的日常点点滴滴.

前言 &#x1f618;个人主页&#xff1a;曲终酣兴晚^R的小书屋&#x1f971; &#x1f615;作者介绍&#xff1a;一个莽莽撞撞的&#x1f43b; &#x1f496;专栏介绍&#xff1a;日常生活&往事回忆 &#x1f636;‍&#x1f32b;️每日金句&#xff1a;被人暖一下就高热&…...

C语言:每日一练(选择+编程)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;打印1到最大的n位数 示例1 思路一&#xff1a; 题二&#xff1a;计算日期到天数转换 示例1 思路一&#xf…...

Prompt、RAG、微调还是重新训练?选择正确的生成式 AI 的方法指南

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 这篇博客试图根据一些常见的可量化指标&#xff0c;为您选择适合您用例的生成式人工智能方法提供指导。 生成式 AI 正在以惊人的速度发展&#xff0c…...

Java实现单例模式的几种方法

单例模式作为23中设计模式中最基础的设计模式&#xff0c;一般实现方式为 ①私有化构造方法 ②提供一个获取对象的静态方法 除此之外&#xff0c;实现单例模式的方法还有很多种&#xff0c;这篇文章主要介绍实现单例模式的几种方法。 目录 一、懒汉式单例 二、懒汉式单例优化…...

VIOOVI:标准的作业规范要求是什么?标准化作业规范怎么写?

本文围绕“标准化作业”展开论述&#xff0c;分享一些关于标准化作业以及标准的作业规范等相关知识。 什么是标准化作业&#xff1f; 标准化作业是一种以人的行为为中心&#xff0c;在一个操作序列中有效地进行生产而没有浪费的操作方法。 标准化作业的前提即&#xff1a;关注…...

WPF中的GridSplitter使用原则

WPF中的GridSplitter使用原则 GridSplitter对象必须放在Grid单元格中。可以预留一行或者列的Height或Width属性设置为auto。GridSplitter对象总是改变整行或整列的尺寸&#xff0c;为使该对象外观和行为保持一致&#xff0c;需要拉伸GridSplitter对象使其穿越整行或整列&#…...

【【STM32----I2C通信协议】】

STM32----I2C通信协议 我们会发现I2C有两根通信线&#xff1a; SCL和SDA 同步 半双工 带数据应答 支持总线挂载多设备&#xff08;一主多从&#xff0c;多主多从&#xff09; 硬件电路 所有I2C设备的SCL连在一起&#xff0c;SDA连在一起 设备的SCL和SDA均要配置成开漏输出模式 …...

【JUC】线程池ThreadPoolTaskExecutor与面试题解读

1、ThreadPoolTaskExecutor 创建线程池 从它的创建和使用说起&#xff0c;创建和使用的代码如下&#xff1a; 创建&#xff1a; ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize);executor.setMaxPoolSize(maxPoolSize…...

也许你正处于《孤注一掷》中的“团队”,要留心了

看完这部电影&#xff0c;心情久久不能平静&#xff0c;想了很多&#xff0c;倒不是担心自己哪天也成为“消失的yaozi”&#xff0c;而是在想&#xff0c;我们每天所赖以生存的工作&#xff0c;跟电影里他们的工作比&#xff0c;差别在哪里呢&#xff1f; 目录 1. 产品的本质…...

Kafka 入门到起飞 - 什么是 HW 和 LEO?何时更新HW和LEO呢?

上文我们已经学到&#xff0c; 一个Topic&#xff08;主题&#xff09;会有多个Partition&#xff08;分区&#xff09;为了保证高可用&#xff0c;每个分区有多个Replication&#xff08;副本&#xff09;副本分为Leader 和 Follower 两个角色&#xff0c;Leader副本对外提供读…...

go入门实践五-实现一个https服务

文章目录 前言生成证书申请免费的证书使用Go语言生成自签CA证书 https的客户端和服务端服务端代码客户端代码 tls的客户端和服务端服务端客户端 前言 在公网中&#xff0c;我想加密传输的数据。(1)很自然&#xff0c;我想到了把数据放到http的请求中&#xff0c;然后通过tls确…...

面试之快速学习STL-set

set 和 map、multimap 容器不同&#xff0c;使用 set 容器存储的各个键值对&#xff0c;要求键 key 和值 value 必须相等使用 set 容器存储的各个元素的值必须各不相同从语法上讲 set 容器并没有强制对存储元素的类型做 const 修饰, 即 set 容器中存储的元素的值是可以修改的。…...

leetcode 1614.括号的最大嵌套深度

⭐️ 题目描述 &#x1f31f;leetcode链接&#xff1a;括号的最大嵌套深度 ps&#xff1a; 使用数据结构栈来存储 ( 在使用 maxDepth 变量记录栈顶 top 的最大值&#xff0c;当遇到 ) 时删除栈顶元素。举个例子 (1)((2))(((3)))&#xff0c;当遇到第一个 ( 时 top 1&#xff…...

Ajax 笔记(四)—— Ajax 进阶

笔记目录 4. Ajax 进阶4.1 同步代码和异步代码4.2 回调函数地狱4.2.1 解决方法一&#xff1a;Promise 链式调用4.2.2 解决方法二&#xff1a;async 函数和 await 4.3 Promise.all 静态方法4.4 事件循环4.4.1 事件循环4.4.2 宏任务与微任务 4.5 案例4.5.1 案例一-商品分类4.5.2 …...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...