【Java初阶(四)】数组的定义和使用

❣博主主页: 33的博客❣
▶文章专栏分类: Java从入门到精通◀
🚚我的代码仓库: 33的代码仓库🚚

目录

  • 1.前言
  • 2.数组的概念
    • 2.1数组的初始化
    • 2.2数组的使用
      • 2.2.1数组元素访问
      • 2.2.2遍历数组
  • 3.数组是引用类型
    • 3.1实例
    • 3.2 认识null
  • 4.数组的应用
    • 4.1 二分查找
    • 4.2 冒泡查找
    • 4.3 Arrays.sort()
    • 4.4数组的拷贝
    • 4.5copyOf拷贝
  • 5.二维数组
  • 6.总结

1.前言

本章重点:

1.理解数组基本概念
2. 掌握数组的基本用法
3. 数组与方法互操作
4. 熟练掌握数组相关的常见问题和代码


2.数组的概念

数组:相同类型元素的一个集合,在内存中是一段连续的空间。

2.1数组的初始化

数组的创建:

T[] 数组名=new T[N];

**T:**表示数组中存放元素的类型
T[]:表示数组的类型
**N:**表示数组的长度
例:

int[] array1 = new int[10];       // 创建一个可以容纳10个int类型元素的数组
double[] array2 = new double[5];  // 创建一个可以容纳5个double类型元素的数组

数组的初始化:

int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
int[] array1 = {0,1,2,3,4,5,6,7,8,9};//省略了new int[]

2.2数组的使用

2.2.1数组元素访问

数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。

int[]array = new int[]{10, 20, 30, 40, 50};
 System.out.println(array[0]);
 System.out.println(array[1]);
 System.out.println(array[2]);
 System.out.println(array[3]);
 System.out.println(array[4]); 
  System.out.println(array[5]); //有5个元素,下标最大只能为4,array[5]则越界了
// 也可以通过[]对数组中的元素进行修改
 array[0] = 100;
 System.out.println(array[0])

2.2.2遍历数组

int[]array ={10, 20, 30, 40, 50};
//用for循环遍历
 for(int i = 0; i < 5; i++){
    System.out.println(array[i]);
 }
//用 for-each遍历
 for (int x : array) {
    System.out.println(x);
 }
//toString遍历
System.out.println(Arrays.toString(array));//需要导入java.util.Arrays包

3.数组是引用类型

内存是一段连续的存储空间,主要用来存储程序运行时数据的。比如:

  1. 程序运行时代码需要加载到内存
  2. 程序运行产生的中间数据要存放在内存
  3. 程序中的常量也要保存
  4. 有些数据可能需要长时间存储,而有些数据当方法运行结束后就要被销毁

3.1实例

int[]array  = {10, 20};

在这里插入图片描述


3.2 认识null

 int[] arr = null;
 System.out.println(arr[0]);

null 在 Java 中表示 “空引用” , 也就是一个不指向对象的引用。一旦尝试读写, 就会抛出 NullPointerException,空指针异常。


4.数组的应用

4.1 二分查找

二分查找只针对有序数组,查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较:
如果相等,即找到了返回该元素在数组中的下标
如果小于,以类似方式到数组左半侧查找
如果大于,以类似方式到数组右半侧查找

public class Tsest {
    public static int find(int[] arr,int a){
        int l=0;
        int mid=-1;
        int r= arr.length-1;
        while(l<=r){
             mid=(l+r)/2;
            if(arr[mid]==a){
                System.out.println("找到了");
                return mid;
            }
            if(arr[mid]<a){
                l=mid+1;
            }
            if(arr[mid]>a){
                r=mid-1;
            }
        }
        if(l>r){
        System.out.println("没有找到");
        }
        return-1;

    }
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int x=find(arr,6);
        System.out.println(x);
    }
}


4.2 冒泡查找

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

 
        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
 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) {
    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 中内置了更高效的排序算法Arrays.sort()


4.3 Arrays.sort()

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

4.4数组的拷贝

//错误的做法,依然执行同一个对象
int[] arr = {1,2,3,4,5,6};
 int[] newArr = arr
//正确的做法
public static int[] coppy(int[] arr){
    int[] arr1=new int[arr.length];
    for(int i=0;i< arr.length;i++){
        arr1[i]=arr[i];
    }
    return arr1;
}

public static void main(String[] args) {
    int[] arr={8,5,3,1,9};
    int[] arr2=coppy(arr);
    System.out.println(Arrays.toString(arr));
    System.out.println(Arrays.toString(arr2));
}

也使用Arrays中copyOf方法完成数组的拷贝


4.5copyOf拷贝

int[] arr= {1,2,3,4};
int[] newArr = Arrays.copyOf(arr, arr.length);
 System.out.println("newArr: " + Arrays.toString(newArr))
 //拷贝某一个范围
 int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);//范围为[2,4)
 System.out.println("newArr2: " + Arrays.toString(newArr2));
 }

5.二维数组

二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组
基本语法:

数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 }

二维数组遍历:

 int[][] arr = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
 };
 
for (int row = 0; row < arr.length; row++) {
    for (int col = 0; col < arr[row].length; col++) {
        System.out.printf("%d\t", arr[row][col]);
    }
    System.out.println("");
 }
 
// 执行结果
1       2       3       4
 5       6       7       8
 9       10      11      1

二维数组的用法和一维数组并没有明显差别, 因此我们不再赘述。


6.总结

本篇文章主要介绍了数组基本概念,数组的基本用法,数组与方法互操作,还有一些在数组中常见的代码,数组中还有一些方法博主没有介绍到,感兴趣的同学可以通过其他博主的文章进行学习。

下期预告:类和对象

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

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

相关文章

合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测

原文链接&#xff1a;合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598798&idx7&snc054ed7c9d9c433d00837a7798080935&chksmfa820329cdf58a3f6b5986d6d4da3d19f81e3efd0b159f…

YOLOv9/YOLOv8算法改进【NO.106】使用YOLOv7下采样进行改进

前 言 YOLO算法改进系列出到这&#xff0c;很多朋友问改进如何选择是最佳的&#xff0c;下面我就根据个人多年的写作发文章以及指导发文章的经验来看&#xff0c;按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通&#xff1a; 首推…

米多论文怎么用 #学习方法#职场发展

米多论文是一款专为论文写作者设计的工具&#xff0c;可以帮助用户进行论文的查重和降重。它的使用非常简单&#xff0c;只需将需要检测的论文内容粘贴到相应的输入框中&#xff0c;点击“检测”按钮即可开始查重。米多论文通过比对用户提交的论文和互联网上已经存在的内容&…

零基础机器学习(4)之线性回归的基本原理

文章目录 一、线性回归的基本原理1.相关与回归2.线性回归的原理分析①线性回归的一般公式②线性回归的损失函数③线性回归方程的参数求解方法A.最小二乘法B.梯度下降法 一、线性回归的基本原理 1.相关与回归 相关描述的是变量之间的一种关系。 从统计角度看&#xff0c;变量之…

数据结构面试题

1、数据结构三要素&#xff1f; 逻辑结构、物理结构、数据运算 2、数组和链表的区别&#xff1f; 数组的特点&#xff1a; 数组是将元素在内存中连续存放&#xff0c;由于每个元素占用内存相同&#xff0c;可以通过下标迅速访问数组中任何元素。数组的插入数据和删除数据效率低…

自己动手做一个批量doc转换为docx文件的小工具

前言 最近遇到了一个需求&#xff0c;就是要把大量的doc格式文件转换为docx文件&#xff0c;因此就动手做了一个批量转换的小工具。 背景 doc文件是什么&#xff1f; “doc” 文件是一种常见的文件格式&#xff0c;通常用于存储文本文档。它是 Microsoft Word 文档的文件扩…

主干网络篇 | YOLOv8更换主干网络之SwinTransformer

前言:Hello大家好,我是小哥谈。Swin Transformer是一种基于Transformer架构的图像分类模型,与传统的Transformer模型不同,Swin Transformer通过引入分层的窗口机制来处理图像,从而解决了传统Transformer在处理大尺寸图像时的计算和内存开销问题。Swin Transformer的核心思…

【算法】环形纸牌均分问题

104. 货仓选址 - AcWing题库 有n家商店&#xff0c;求把货仓建在哪能使得货仓到每个点的距离总和最小&#xff0c;输出最短的距离总和。 首先&#xff0c;我们看只有两个点的情况&#xff0c;在这种情况下我们选[1,2]的任何一个位置都是一样的&#xff0c;总和就是这段区间的长…

利用sealos安装k8s集群

1. 环境准备 准备三台干净&#xff08;未安装过k8s环境&#xff09;的虚拟机 # 所有的主机都要配置主机名和域名映射 # 设置主机名 hostnamectl set-hostname k8s-master01 # vim /etc/hosts 192.168.59.201 k8s-master01 192.168.59.202 k8s-worker01 192.168.59.203 k8…

01. 如何配置ESP32环境?如何开发ESP32?

0. 前言 此文章收录于《ESP32学习笔记》专栏&#xff0c;此专栏会结合实际项目记录作者学习ESP32的过程&#xff0c;争取每篇文章能够将细节讲明白&#xff0c;会应用。 1. 安装IDE&#xff1a;Thonny 后续项目中我们都是使用pythont语言&#xff0c;而thonny工具能很好的支撑E…

Mongodb入门到入土,安装到实战,外包半年学习的成果

这是我参与「第四届青训营 」笔记创作活动的的第27天&#xff0c;今天主要记录前端进阶必须掌握内容Mongodb数据库,从搭建环境到运行数据库,然后使用MongodB; 一、文章内容 数据库基础知识关系型数据库和非关系型数据库为什么学习Mongodb数据库环境搭建及运行MongodbMongodb命…

React生命周期新旧对比

组件从创建到死亡&#xff0c;会经过一些特定的阶段React组件中包含一系列钩子函数{生命周期回调函数}&#xff0c;会在特定的时刻调用我们在定义组件的时候&#xff0c;会在特定的声明周期回调函数中&#xff0c;做特定的工作。旧生命周期总结 旧的生命周期分为三个阶段 1 初…

Nacos部署(三)Docker部署Nacos2.3单机环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Nacos部署&#xff08;三&#xff09;Docker部署Nacos2.3单机环境 ⏱️…

SQLiteC/C++接口详细介绍sqlite3_stmt类(六)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;五&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;七&#xff09; 17. sqlite3_clear_bindings函数 sqlite3_clear_bindings函…

从零开始学习在VUE3中使用canvas(五):globalCompositeOperation(图形混合)

一、简介 通过设置混合模式来改变图像重叠区域的显示方式。 const ctx canvas.getContext("2d");ctx.globalCompositeOperation "source-over"; 二、属性介绍 source-over 这是默认的复合操作。将源图像绘制到目标图像上&#xff0c;保留目标图像的不透…

通过jsDelivr实现Github的图床CDN加速

最近小伙伴们是否发现访问我的个人博客http://xiejava.ishareread.com/图片显示特别快了&#xff1f; 我的博客的图片是放在github上的&#xff0c;众所周知的原因&#xff0c;github访问不是很快&#xff0c;尤其是hexo博客用github做图床经常图片刷不出来。一直想换图床&…

牛客NC108 最大正方形【中等 动态规划 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e 思路 动态规划: 先初始化第一行和第一列。然后其他单元格依赖自己的上边&#xff0c;左边和左上角参考答案Java import java.util.*;public class Solution {/*** 代码中的类…

【Docker】golang操作容器使用rename动态更新容器的名字

【Docker】golang操作容器使用rename动态更新容器的名字 大家好 我是寸铁&#x1f44a; 总结了一篇golang操作容器使用rename动态更新容器的名字✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 今天遇到一个新的需求&#xff0c;要动态改变运行中的容器名字。 可以考虑先把…

OpenLayers基础教程——WebGLPoints中要素样式的设置方法解析

1、前言 前一篇博客介绍了如何在OpenLayers中使用WebGLPoints加载海量数据点的方法&#xff0c;这篇博客就来介绍一下WebGLPoints图层的样式设置问题。 2、样式运算符 在VectorLayer图层中&#xff0c;我们只需要创建一个ol.style.Style对象即可&#xff0c;WebGLPoints则不…

静态综合实验

一.搭建拓扑结构 1.根据拓扑结构可以把网段分成14个网段&#xff0c;根据192.168.1.0/24可以划分出ip地址和环回地址 其中环回r1分别是 192.168.1.32/27 192.168.1.32/28 192.168.1.48/28 2.划分完后如图&#xff1a; 二.配置IP地址 注意&#xff1a;为了避免错误&#…