Java数组、排序和查找

简介: Java数组、排序和查找

数组介绍

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

数组的使用

使用方式1-动态初始化数组的定义

数据类型数组名[]=new数据类型[大小]

int a[] = new int[5];//创建了一个数组,名字a,存放5个int
AI 代码解读

说明: 这是定义数组的一种方法。

import java.util.Scanner;
public class Array02 { 

    //编写一个main方法
    public static void main(String[] args) {
        //演示 数据类型 数组名[]=new 数据类型[大小]
        //循环输入5个成绩,保存到double数组,并输出

        //步骤
        //1. 创建一个 double 数组,大小 5

        //(1) 第一种动态分配方式
        //double scores[] = new double[5];
        //(2) 第2种动态分配方式, 先声明数组,再 new 分配空间
        double scores[] ; //声明数组, 这时 scores 是 null
        scores = new double[5]; // 分配内存空间,可以存放数据


        //2. 循环输入
        //   scores.length 表示数组的大小/长度
        //   
        Scanner myScanner = new Scanner(System.in);
        for( int i = 0; i < scores.length; i++) {
            System.out.println("请输入第"+ (i+1) +"个元素的值");
            scores[i] = myScanner.nextDouble();
        }

        //输出,遍历数组
        System.out.println("==数组的元素/值的情况如下:===");
        for( int i = 0; i < scores.length; i++) {
            System.out.println("第"+ (i+1) +"个元素的值=" + scores[i]);
        }
    }
}
AI 代码解读

使用方式2-动态初始化

1.先声明数组

语法:数据类型数组名[]; 也可以数据类型[] 数组名;

int a[]; 或者int[] a;

2.创建数组

语法: 数组名=new 数据类型[大小];

a=new int[10];

使用方式3-静态初始化

初始化数组

语法:

数据类型 数组名[]={元素值,元素值...}

int a[]={2,5,6,7,8,89,90,34,56},

数组使用注意事项和细节

  1. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
  2. 数组创建后,如果没有赋值,有默认值
    int 0

short 0

byte 0

long 0

float 0.0

double 0.0

char \u0000

boolean false

String null

  1. 数组属引用类型,数组型数据是对象(object)

数组应用案例

创建一个char 类型的26 个元素的数组,分别放置'A'-'Z'。使用for 循环访问所有元素并打印出来。提示:char 类型数据运算'A'+2 -> 'C'

public class ArrayExercise01 { 

    //编写一个main方法
    public static void main(String[] args) {

        /*
        创建一个char类型的26个元素的数组,分别 放置'A'-'Z'。
        使用for循环访问所有元素并打印出来。
        提示:char类型数据运算 'A'+1 -> 'B'  

        思路分析
        1. 定义一个 数组  char[] chars = new char[26]
        2. 因为 'A' + 1 = 'B' 类推,所以老师使用for来赋值
        3. 使用for循环访问所有元素
         */
        char[] chars = new char[26];
        for( int i = 0; i < chars.length; i++) {//循环26次
            //chars 是 char[] 
            //chars[i] 是 char
            chars[i] = (char)('A' + i); //'A' + i 是int , 需要强制转换
        }

        //循环输出
        System.out.println("===chars数组===");
        for( int i = 0; i < chars.length; i++) {//循环26次
            System.out.print(chars[i] + " ");
        }

    }
}
AI 代码解读

数组赋值机制

数组在默认情况下是引用传递,赋的值是地址。(相比:变量往往是值传递)

int[] arr1 = {1,2,3};
int[] arr2 = arr1;
AI 代码解读

数组拷贝

编写代码实现数组拷贝(内容复制)

int[] arr1 = {10,20,30};
int[] arr2 = new int[arr1.length];
for(int i = 0; i < arr1.length; i++) {
    arr2[i] = arr1[i];
}
AI 代码解读

数组添加/扩容

要求:实现动态的给数组添加元素效果,实现对数组扩容。

  1. 原始数组使用静态分配 int[] arr = {1,2,3}
  2. 增加的元素4,直接放在数组的最后arr = {1,2,3,4}
  3. 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n
1. 定义初始数组int[] arr = {1,2,3}//下标0-2
2. 定义一个新的数组int[] arrNew = new int[arr.length+1];
3. 遍历arr 数组,依次将arr 的元素拷贝到arrNew 数组
4.4 赋给arrNew[arrNew.length - 1] = 4;把4 赋给arrNew 最后一个元素
5. 让arr 指向arrNew ; arr = arrNew; 那么原来arr 数组就被销毁
6. 创建一个Scanner可以接受用户输入
7. 因为用户什么时候退出,不确定,使用do-while + break 来控制
AI 代码解读

多维数组 二维数组

动态初始化1

  1. 语法: 类型[][] 数组名=new 类型[大小][大小]
  2. 比如: int a[][]=new int[2][3]
  3. 二维数组在内存的存在形式(!!画图)

动态初始化2

先声明:类型数组名[][];

再定义(开辟空间) 数组名= new 类型[大小][大小]

赋值(有默认值,比如int 类型的就是0)

静态初始化

定义类型数组名[][] = {{值1,值2..},{值1,值2..},{值1,值2..}}
int[][] arr = {{1,1,1}, {8,8,9}, {100}};

二维数组的应用案例

使用二维数组打印一个10 行杨辉三角

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1.第一行有1个元素,第n行有n个元素

2.每一行的第一个元素和最后一个元素都是1

3.从第三行开始,对于非第一个元素和最后一个元素的元素的值.

arr[i][j] = arr[i-1][j] + arr[i-1][j-1];

public class YangHui { 

    //编写一个main方法
    public static void main(String[] args) {
        /*
        使用二维数组打印一个 10 行杨辉三角
        1
        1 1
        1 2 1
        1 3 3  1
        1 4 6  4  1
        1 5 10 10 5 1

        规律
         1.第一行有 1 个元素, 第 n 行有 n 个元素
         2. 每一行的第一个元素和最后一个元素都是 1
         3. 从第三行开始, 对于非第一个元素和最后一个元素的元素的值. arr[i][j] 
          arr[i][j]  =  arr[i-1][j] + arr[i-1][j-1]; //必须找到这个规律

         */
        int[][] yangHui = new int[12][];
        for(int i = 0; i < yangHui.length; i++) {//遍历yangHui的每个元素

            //给每个一维数组(行) 开空间
            yangHui[i] = new int[i+1];
            //给每个一维数组(行) 赋值
            for(int j = 0; j < yangHui[i].length; j++){
                //每一行的第一个元素和最后一个元素都是1
                if(j == 0 || j == yangHui[i].length - 1) {
                    yangHui[i][j] = 1;
                } else {//中间的元素
                    yangHui[i][j]  =  yangHui[i-1][j] + yangHui[i-1][j-1];
                }
            }
        }
        //输出杨辉三角
        for(int i = 0; i < yangHui.length; i++) {
            for(int j = 0; j < yangHui[i].length; j++) {//遍历输出该行
                System.out.print(yangHui[i][j] + "\t");
            }
            System.out.println();//换行.
        }
    }
}
AI 代码解读

二维数组使用细节和注意事项

  1. 一维数组的声明方式有:
int[] x 或者int x[]
AI 代码解读
  1. 二维数组的声明方式有:
int[][] y 或者int[] y[] 或者int y[][]
AI 代码解读
  1. 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如: map[][] 是一个二维数组
int map [][] = {{1,2},{3,4,5}}
AI 代码解读

由map[0] 是一个含有两个元素的一维数组,map[1] 是一个含有三个元素的一维数组构成,我们也称为列数不等的二维数组


文章和代码已经归档至【Github仓库: https://github.com/timerring/java-tutorial 】或者公众号【AIShareLab】回复 java 也可获取。
目录
打赏
0
0
0
0
551
分享
相关文章
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
Java基础(六):数组
Java基础(六):数组
33 10
Java基础(六):数组
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
66 12
Java 排序神器:Comparable 和 Comparator 该怎么选?
嗨,大家好,我是小米!今天和大家聊一聊Java社招面试中常考的经典问题——Comparable和Comparator的区别。Comparable定义对象的自然排序,适用于单一固定的排序规则;Comparator则是策略接口,用于定义自定义排序规则,适用于多样化或多变的排序需求。掌握这两者的区别是理解Java排序机制的基础,也是面试中的加分题。结合实际项目场景深入探讨它们的应用,能更好地打动面试官。如果你觉得有帮助,欢迎点赞、收藏、分享,期待你的一键三连!我们下期见~ 我是小米,一个喜欢分享技术的程序员,关注我的微信公众号“软件求生”,获取更多技术干货!
47 20
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
49 4
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
63 2
|
4月前
|
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
130 2
|
4月前
|
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
76 9
|
4月前
|
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
46 3
|
4月前
|
Java一分钟之-数组的创建与遍历
数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
38 6

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等