Java数组

数组可以存放 多个 同一类型 的数据,是 引用类型

一般使用方式

先定义并声明

int[] arr = new int[5];
// 默认为值数据类型的值

行可以先声明 再分配空间

double[] arr2;
arr2 = new double[10];  // 分配内存空间  可以存放数据
// 若是没有分配中间直接使用 会报错 错误: 可能尚未初始化变量

也可以静态初始化

double[] weight = {55, 73, 55, 83, 55, 83,77, 53,80};

注意: double[] arr可以写成 double arr[]

完整例子:

public class Array{
     public static void main(String[] args) {
        /*
        创建一个char类型的26个元素的数组,分别放置'A'-'Z'。使用for循环访问 所有元素并打印出来
        */
        char[] chars = new char[26];
        for (char i = 'A'; i

使用细节

  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  2. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用
  3. 数组创建后,如果没有赋值,有默认值
    int 0 short 0 byte 0 long 0 float 0.0 double 0.0 char \u0000 boolean false String null
  4. 使用数组的步骤
  5. 声明数组并开辟空间
  6. 给数组各个元素赋值
  7. 使用数组
  8. 数组的下标是从 0开始的
  9. 数组下标必须在指定范围内使用,否则报:下标越界异常,比如 int[]arr=new int[5];则有效下标为 0-4
  10. 数组属引用类型,数组型数据是对象(object)

引用类型和值类型

java的基础数据类型都是值类型( byte short int long float double char boolean
类 接口 数组是引用数据类型
引用类型和值类型在内存中的存储方式是不一样的,这也导致了操作上的区别

Java数组

一些数组操作

这里记录一些常用的数组操作,有自己实现的, 也有使用 java.util.Arrays类的

数组拷贝

即将一个数组在堆中重新创建一份

nt[] arr1= {1,2,3,4,5,6,7,8,9,10};
 int[] arr2= new int[arr1.length];
 // 赋值
 for (int i = 0; i < arr1.length; i++) {
     arr2[i] = arr1[i];
 }

对应的Arrays工具类方法

type[] copyOf(type[] original, int length)

这个方法将会把 original数组复制成一个新数组,其中 length 是新数组的长度。
如果 length 小于 original 数组的长度,则新数组就是原数组的前面 length 个元素,
如果 length 大于 original 数组的长度,则新数组的前面元索就是原数组的所有元素,
后面补充 0(数值类型)、false(布尔类型)或者 null(引用类型)。

type[] copyOfRange(type[] original, int from, int to)

这个方法与前面方法相似,但这个方法只复制 original 数组的 from 索引到 to 索引的元素。

数组反转

int[] arr = {12,123,92,2,10,384,12};
int start = 0;
int end = arr.length - 1;
while (start < end) {
    arr[start] ^= arr[end];
    arr[end] ^= arr[start];
    arr[start] ^= arr[end];
    start++;
    end--;
}

排序

void sort(type[] a)

该方法对 a 数组的数组元素进行排序

void sort(type[] a, int fromIndex, int toIndex)

该方法与前一个方法相似,区别是该方法仅仅对 fromIndex 到 toIndex 索引的元素进行排序

批量赋值

void fill(type[] a, type val)

该方法将会把 a 数组的所有元素都赋值为 val

void fill(type[] a, int fromIndex, int toIndex, type val)

该方法与前一个方法的作用相同,区别只是该方法仅仅将 a 数组的 fromIndex 到 toIndex 索引的数组元素赋值为 val

查询

int binarySearch(type[] a, type key)

使用二分法查询 key 元素值在 a 数组中出现的索引,如果 a 数组不包含 key 元素值,则返回负数。
调用该方法时要求数组中元素己经按升序排列,这样才能得到正确结果

int binarySearch(type[] a, int fromIndex, int toIndex, type key)

这个方法与前一个方法类似,但它只搜索 a 数组中 fromIndex 到 toIndex 索引的元素。
调用该方法时要求数组中元素己经按升序排列,这样才能得到正确结果

数组是否相等

boolean equals(type[] a, type[] a2)

如果 a 数组和 a2 数组的长度相等,而且 a 数组和 a2 数组的数组元素也一一相同,该方法将返回 true

转成字符串

String toString(type[] a)

该方法将一个数组转换成一个字符串。该方法按顺序把多个数组元素连缀在一起,多个数组元素使用英文逗号,和空格隔开。

deepToString可以转多维数组

二维数组

一个数组的元素为一个数组,则为二维数组。
二维数据在内存中:

Java数组
 public class Array{
     public static void main(String[] args) {
        int[][] arr10 = {{1,2,3}, {123,21,12}, {12,3,4}};
        // 初始化
        int[][] arr11 = new int[3][2]; // {{1,2}, {2,3}, {3,4}}
        // 声明 再 初始化
        int[][] arr12;
        arr12 = new int[2][3];

        // 动态列数: {{1}, {1,2}, {1,2,3}}
        int[][] arr13 = new int[3][]; // !! 空着就行
        for (int i = 0; i < arr13.length; i++) {
            // 动态开辟空间
            arr13[i] = new int[i + 1];
            for (int j = 0; j < arr13[i].length; j++) {
                arr13[i][j] = j + 1;
            }
        }
     }
}

Original: https://www.cnblogs.com/lczmx/p/16034189.html
Author: 403·Forbidden
Title: Java数组

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581309/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring整合Redis

    一、准备工作 首先创建一个空工程,然后在该空工程创建一个模块(选择Spring Initializal),选择Spring Data Redis依赖。 pomx.xml

    Java 2023年6月8日
    067
  • 从壹开始 [ Ids4实战 ] 之七 ║ 客户端、服务端、授权中心全线打通

    1、经过元旦两天的全力整改,终于在这新的一年,完成了我的布道生涯的第一个大步走 —— 那就是客户端(VUE)、服务端(ASP.NET Core API)、授权中心(Identity…

    Java 2023年5月30日
    077
  • 6.824 Spring 2020 feb4 MapReduce(2004)笔记

    前言 打算跟着 MIT 的20年春季课程节奏一起通过4个 lab 来更加深刻和系统的来认识和实现分布式系统。我会坚持把每个学习节点和心得和笔记给记录下来。 每个 lec 之前一般要…

    Java 2023年5月29日
    060
  • Java生产者消费者问题

    2.用BlockingQueue会自动处理生产者消费者问题 3.两个线程打印奇偶数 Original: https://www.cnblogs.com/shamgod/p/5461…

    Java 2023年5月29日
    095
  • 建造者模式(创建型)

    建造者模式 介绍 建造者模式注重的是部件构建的过程,意在 通过一步一步地精确构造出一个复杂的对象。 可以将建造者模式理解为,假设我们有一个对象需要建立,这个对象是由多个组件(Com…

    Java 2023年6月15日
    076
  • Spring Boot 入门(二)单元测试

    *创建测试 选中类名,使用快捷键”Alt+Enter”,选择”Create Test” 勾选被测试的成员 编写单元测试 packag…

    Java 2023年6月5日
    073
  • 成员变量和局部变量的区别

    1.相同点:1.1定义变量的格式:1.2先声明,后使用1.3变量都有其对应的作用域 2.不同点:2.1在类中声明的位置的不同属性:直接定义在类的一对{}内局部变量,声明在方法内、方…

    Java 2023年6月15日
    094
  • 如何下载网页上的背景图片?

    如何下载网页上的背景图片?(以谷歌浏览器为例) 具体步骤(以研控为例) 一、登录网址 我们这里以网站 研控 为例,网址放在这里:https://www.yankong.org/ 我…

    Java 2023年6月5日
    0195
  • 白盒安全测试系列 之 概述

    1.1 前言Java Web安全测试主要分为黑盒测试和白盒测试,黑盒测试是指测试人员不清楚Web具体的架构和实现,通过模拟一个或者多个攻击角色进行渗透攻击,来发现潜在的漏洞和安全风…

    Java 2023年6月7日
    086
  • 微信扫码登录

    微信登录之前还需要了解OAuth2知识 前期准备 注册微信开放平台 邮箱激活 完善开发者资料(暂不支持个体用户) 开发者资质认证: &#x8425;&#x4E1A;…

    Java 2023年6月13日
    091
  • 识别 UTF-8 编码

    思路:如果GBK中文字节流我们使用 UTF-8 编码,会出现未知字符�,字节代表数字为 -65, -67。所以先尝试用 utf-8 编码,然后获取字节流,判断其中是否存在未知字符。…

    Java 2023年6月9日
    096
  • 【力扣】1720. 解码异或后的数组

    未知 整数数组 arr 由 n 个非负整数组成。 经编码后变为长度为 n – 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XO…

    Java 2023年6月8日
    075
  • Synchronized锁升级原理与过程深入剖析

    Synchronized锁升级原理与过程深入剖析 前言 在上篇文章深入学习Synchronized各种使用方法当中我们仔细介绍了在各种情况下该如何使用synchronized关键字…

    Java 2023年6月8日
    0103
  • Spring Cloud 新一代Web框架微服务翘楚(一)

    序言 springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易。 通过一些简单的注…

    Java 2023年5月30日
    065
  • Rust特征与泛型区别点

    1. Rust的特征与泛型 use std::boxed::Box; // 定义一个特征 pub trait Animal{ fn bark(&self); } pub s…

    Java 2023年6月15日
    087
  • Java递归查找层级文件夹下特定内容的文件

    递归查找文件 引言 或许是文件太多,想找某个文件又忘记放哪了;又或者是项目改造,需要将外部调用接口进行改造,项目太多,又无法排查。那么怎么快速找到自己想要的内容就是一件值得思考的事…

    Java 2023年6月8日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球