Java——数组练习

news2024/11/30 12:44:53

目录

一.数组转字符串

二.数组拷贝

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

四.查找数组中指定元素(顺序查找)

五.查找数组中指定元素(二分查找)

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

七.数组逆序


一.数组转字符串

代码示例:
import java.util.Arrays
int[] arr = {1,2,3,4,5,6};
String newArr = Arrays.toString(arr);
System.out.println(newArr);
// 执行结果
[1, 2, 3, 4, 5, 6]
使用这个方法后续打印数组就更方便一些 .
Java 中提供了 java.util.Arrays , 其中包含了一些操作数组的常用方法 .

 

二.数组拷贝

import java.util.Arrays;
public static void func( ) {     
 // newArr和arr引用的是同一个数组     
 // 因此newArr修改空间中内容之后,arr也可以看到修改的结果    
 int[ ] arr={1,2,3,4,5,6} ;  
 int[ ] new Arr=arr;   
 new Arr[0]=10;    
 System.out.println("new Arr: " + Arrays.to String(arr)) ;      
 //使用Arrays中copyOf方法完成数组的拷贝:   
 //copyOf方法在进行数组拷贝时,创建了一个新的数组    
 //arr和new Arr引用的不是同一个数组     
 arr[0]=1 ;     
 new Arr=Arrays.copyOf(arr,arr.length);   
 System.out.println("new Arr: " + Arrays.to String (newArr));        
 //因为 arr修改其引用数组中内容时,对new Arr没有任何影响    
 arr[0]=10 ;     
 System.out.println("arr:" + Arrays.to String(arr));  
 System.out.println("newArr: "+ Arrays.to String(newArr));       
  //拷贝某个范围.   
 int[] newArr2 = Arrays.copyOfRange(arr,2,4);   
 System.out.println("new Arr2: " + Arrays.to String(new Arr2));
}

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

实现自己版本的拷贝数组:

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[] arr = {1,2,3,4,5,6};
    System.out.println(avg(arr));
}
 
public static double avg(int[] arr) {
    int sum = 0;
    for (int x : arr) {
        sum += x;
   }
    return (double)sum / (double)arr.length;
}
 
// 执行结果
3.5

四.查找数组中指定元素(顺序查找)

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

public static void main(String[] args) {
    int[] arr = {1,2,3,10,5,6};
    System.out.println(find(arr, 10));
}
 
public static int find(int[] arr, int data) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == data) {
            return i;
       }
   }
    return -1;  // 表示没有找到,找到返回的是下标,返回-1,因为数组下标没有-1
}
 
// 执行结果
3

五.查找数组中指定元素(二分查找)

针对有序数组, 可以使用更高效的二分查找。 

啥叫有序数组? 
有序分为 "升序" 和 "降序" 
如 1 2 3 4 , 依次递增即为升序. 
如 4 3 2 1 , 依次递减即为降序

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

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

public static void main(String[] args) {
    int[] arr = {1,2,3,4,5,6};
    System.out.println(binarySearch(arr, 6));
}
 
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;
}
 
// 执行结果
5

可以看到, 针对一个长度为 10000 个元素的数组查找, 二分查找只需要循环 14 次就能完成查找。随着数组元素个数越多, 二分的优势就越大.

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

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

算法思路 假设排升序:

  • 1. 将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素 就在数组的末尾
  • 2. 依次从上上述过程,直到数组中所有的元素都排列好

public static void main(String[] args) {
    int[] arr = {9, 5, 2, 7};
    bubbleSort(arr);
    System.out.println(Arrays.toString(arr));
}
public static void bubbleSort(int[] arr) {
//i表示趟数
    for (int i = 0; i < arr.length; i++) {
        for (int j = 1; j < arr.length-i; j++) {//-i代表每一趟都比上一趟少一次
            if (arr[j-1] > arr[j]) {
                int tmp = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = tmp;
           }
       }
   } // end for
}  // end bubbleSort
 
// 执行结果
[2, 5, 7, 9]

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

public static void main(String[] args) {
    int[] arr = {9, 5, 2, 7};
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
}

关于 Arrays.sort 的具体实现算法, 我们在后面的排序算法课上再详细介绍. 到时候我们会介绍很多种常见排序算法。

七.数组逆序

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

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

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--;
   }
}

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

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

相关文章

220 基于matlab的考虑直齿轮热弹耦合的动力学分析

基于matlab的考虑直齿轮热弹耦合的动力学分析&#xff0c;输入主动轮、从动轮各类参数&#xff0c;考虑润滑油温度、润滑油粘度系数等参数&#xff0c;输出接触压力、接触点速度、摩擦系数、对流传热系数等结果。程序已调通&#xff0c;可直接运行。 220直齿轮热弹耦合 接触压力…

出游旅行,不能错过的华为nova 12 Ultra4个AI小技巧

随着AI功能的快速普及&#xff0c;让我们的日常生活和工作借助这些工具变得越来越高效。今天就分享4个超级实用的华为nova 12 Ultra自带的AI小技巧&#xff1a;小艺智能魔法抠图、AI消除、图库搜索、小艺帮写&#xff0c;看看有哪些还是你不知道的&#xff1f; 1. 小艺智能…

Windows:Redis数据库图形化中文工具软件——RESP(3)

这个是用于连接redis数据库的软件工具&#xff0c;安装在windows上的图形化界面&#xff0c;并且支持中文&#xff0c;是在github上的一个项目 1.获取安装包 发布 lework/RedisDesktopManager-Windows (github.com)https://github.com/lework/RedisDesktopManager-Windows/rel…

紧急 CCF-C ICPR 2024摘要投稿日期延期至4月10日 速投速成就科研梦

会议之眼 快讯 第27届ICPR&#xff08;The International Conference on Pattern Recognition&#xff09;即国际模式识别会议将于 2024年 12月1日-5日在印度加尔各答的比斯瓦孟加拉会议中心举行&#xff01;ICPR是国际模式识别协会的旗舰会议&#xff0c;也是模式识别、计算机…

OpenHarmony南向开发案例:【智能保险柜】

样例简介 智能保险柜实时监测保险柜中振动传感器&#xff0c;当有振动产生时及时向用户发出警报。在连接网络后&#xff0c;配合数字管家应用&#xff0c;用户可以远程接收智能保险柜的报警信息。后续可扩展摄像头等设备&#xff0c;实现对危险及时报警&#xff0c;及时处理&a…

LeetCode-2529题:正整数和负整数的最大计数(原创)

【题目描述】 给你一个按 非递减顺序 排列的数组 nums &#xff0c;返回正整数数目和负整数数目中的最大值。换句话讲&#xff0c;如果 nums 中正整数的数目是 pos &#xff0c;而负整数的数目是 neg &#xff0c;返回 pos 和 neg二者中的最大值。注意&#xff1a;0 既不是正整…

Linux 线程:线程同步、生产者消费者模型

目录 一、死锁 二、条件变量实现线程同步 1、为什么需要线程同步 2、条件变量、同步、竞态条件 3、条件变量函数&#xff1a;初始化 销毁 等待 唤醒 4、实现简单的多线程程序 不唤醒则一直等待 实现线程同步 三、生产者消费者 1、借助超市模型理解 2、优点 四、基于…

Eland上传bge-base-zh-v1.5向量化模型到ElasticSearch中

最近需要做一些向量检索&#xff0c;试试ES 一、准备 系统&#xff1a;MacOS 14.3.1 ElasticSearch&#xff1a;8.13.2 Kibana&#xff1a;8.13.2 本地单机环境&#xff0c;无集群&#xff0c;也不基于Docker BGE是一个常见的文本转向量的模型&#xff0c;在很多大模型RAG应…

python基础语法--输入和输出

一、 输入 input() python使用input输入变量&#xff0c;input输入的变量为字符串形式&#xff0c;可以通过其他方式转换为整型或其他类型。 &#xff08;1&#xff09;单行读入已知个数的字符串或数字 读入字符串 # 单行读入字符串a,并给出一句输入提示 a input("请…

【汇编语言实战】求三个已知数最大值

C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a10,b20,c15;//scanf("%d %d",&a,&b);if(a>b){if(a>c){printf("%d",c);}else{printf("%d",a);}}else{if(b>c){printf("%d",b);}else{pr…

惊!磁盘未初始化,数据如何拯救?

在数字化时代&#xff0c;磁盘作为存储数据的重要载体&#xff0c;其稳定性直接关系到数据的安全。然而&#xff0c;有时我们会遭遇一个令人头疼的问题——磁盘没有初始化。这意味着磁盘无法被操作系统正常识别和使用&#xff0c;其中的数据仿佛被锁进了一个无形的牢笼。那么&a…

2024全面启动:《水资源基础调查实施方案》解读

【引言】 去年&#xff0c;随着自然资源部《关于开展水资源基础调查工作的通知》&#xff08;自然资发〔2023〕230号&#xff09;的发布&#xff0c;一项旨在全面掌握我国水资源状况、助力生态文明建设与经济社会发展的重大工程——水资源基础调查正式启动。 近日&#xff0c…

uniapp小程序给指定的页面新增下拉刷新功能

需求:有些页面需要实时更新数据,但是又不能做实时刷新,所以给用户一个手动下拉刷新指定接口的功能 第一步:在pages.json给页面加"enablePullDownRefresh": true配置 第二步:在指定页面写onPullDownRefresh方法,和methods同级 onPullDownRefresh() {//加个定时器1秒…

在隐私计算应用中和数链具备哪些技术特点?

在加速“可信数字化”进程的背景下&#xff0c;我国区块链产业将在打造新型平台经济&#xff0c;开启共享经济新时代的同时&#xff0c;带动数字经济“脱虚向实”服务实体经济。 和数软件在加速数字化进程的同时&#xff0c;进一步服务实体经济&#xff0c;提高实体经济的活力…

windows安装Redis,Mongo,ES并快速基本掌握开发流程

前言 这里只是一些安装后的基础操作&#xff0c;后期会学习更加深入的操作 基础操作 前言RedisRedis启动idea集成Redisjedis技术 Mongodbwindows版Mongodb的安装idea整合Mongodb ES(Elasticsearch)ESwindows下载ES文档操作idea整合ES低级别ES整合高级别ES整合 Redis Redis是…

如何在项目中引入vue-router

vue3对应vue-router4 先安装最新版的vue-router pnpm i vue-router 在src目录下新建router文件夹&#xff0c;在其下创建index.js文件 在index.js文件下写 // 创建一个路由器&#xff0c;并暴露出去 // 第一步&#xff1a;引入createRouter import {createRouter,createWeb…

Terraform进阶技巧

Terraform 是管理 IaC 的强大工具&#xff0c;常用常新。在这一部分我们将探索 Terraform 的进阶技能&#xff0c;包括 Terraform 模块、远程状态存储、Terraform 工作区以及自定义 Provider。 1、Terraform 模块 Terraform 模块是可复用的 Terraform 代码包&#xff0c;其…

华为 2024 届校园招聘-硬件通⽤/单板开发——第十套

华为 2024 届校园招聘-硬件通⽤/单板开发——第十套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c;加我…

搭建PyTorch神经网络进行气温预测(手写+调包两种方法)(保证学会!)+找到神经网络的最优情况

代码上有注释&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 本篇主要包括三大部分&#xff1a; 第一部分&#xff1a;导入数据集导入第三方库数据集简单介绍与可视化数据集简单预处理 第二部分&#xff1a;手写神经网络代码实现气温预测&#…

线性表概念及实现1

文章目录 前言一、线性表1.定义2.特点3.一般线性表的抽象数据类型定义 二、线性表的顺序存储&#xff08;顺序表&#xff09;1.基本概念2.数组实现顺序表3.顺序表中基本操作的具体实现 总结 前言 T_T此专栏用于记录数据结构及算法的&#xff08;痛苦&#xff09;学习历程&#…