Java-数组的定义和使用(下)

简介: Java-数组的定义和使用(中)

四、数组练习



       4.1 数组转字符串

       示例

import java.util.Arrays
        int[] arr = {1,2,3,4,5,6};
        String newArr = Arrays.toString(arr);
        System.out.println(newArr);

ea4f65940f3240faa4b9c98fd039ac52.png

     

       Java 中提供了 java.util.Arrays 包, 其中包含了一些操作数组的常用方法。


       4.2  数组拷贝


import java.util.Arrays
        public static void func() {
            int[] arr = {1, 2, 3, 4, 5, 6};
            int[] newArr = arr;//引用同一数组
            newArr[0] = 10;
            System.out.println("newArr: " + Arrays.toString(arr));
            System.out.println("newArr: " + Arrays.toString(newArr));
              }
       public static void main(String[] args) {
             func();
       }

1e22ed1b1a11450f86c91eb44cb03b16.png

arr[0] = 1;
        newArr = Arrays.copyOf(arr, arr.length);+//拷贝
        System.out.println("newArr: " + Arrays.toString(newArr));

0f1b251f2c2c4ae3b52fdfb68993cab0.png

arr[0] = 10;
        System.out.println("arr: " + Arrays.toString(arr));
        System.out.println("newArr: " + Arrays.toString(newArr));

90cf16e8946b4347aad8c8fe1dce2175.png

int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);
        System.out.println("newArr2: " + Arrays.toString(newArr2));

            3c856eb16f114b64ae4de3edbf19e97c.png

int[] copy = new int[arr.length];
        //拷贝函数(原数组,目标数组,目标位置,长度)
        System.arraycopy(arr,0,copy,0,arr.length);
        System.out.println(Arrays.toString(copy));

                8ca2f40691f848cfba2bf7e4769a6a1b.png


      4.3 求数组中元素的平均值


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

       示例

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

0b2b02fe58174dbd9329c4c463215aad.png

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


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

       示例


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

5e86d88db5314808beaacf6491d2e628.png


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


       针对有序数组, 可以使用更高效的二分查找,有序数组指元素依次增大或依次减小的数组。以升序数组为例, 二分查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较,如果相等,即找到了返回该元素在数组中的下标,如果小于,以类似方式到数组左半侧查找,如果大于,以类似方式到数组右半侧查找。


       示例

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


6c7695056c3743bca37b642e3eba5b46.png


       4.6数组排序(冒泡排序)


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

     

示例


import java.util.Arrays;
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;
                        }
                }
        } 
}


d51d7541c69a4fae8d78fe4555188801.png


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


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


fab834e336d8452b9aef5d75869ec204.png


       4.7数组逆序


       给定一个数组, 将里面的元素逆序排列,分析:设定两个下标, 分别指向第一个元素和最后一个元素. 交换两个位置的元素,然后让前一个下标自增, 后一个下标自减, 循环继续即可。


       示例


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

318d8b0d9c69404a818b4a10e3361257.png


       4.8数组的其他相关函数


//比较、填充函数equals、fill
       import java.util.Arrays;
   public static void main(String[] args) {
          int[] array1 = {2,4,6,3};
          int[] array2 = {2,4,6,3,10};
          //比较函数equals,结果为true或false
          System.out.println(Arrays.equals(array1, array2));
          int[] array = new int[10];
          //填充函数fill(数组地址,起始位置,终止位置(左闭右开),值)
          Arrays.fill(array,0,3,9);//[0,3)
          //转换为字符串
          System.out.println(Arrays.toString(array));
}

6803ade0c16e4fbcbf95240e3e977e30.png


五、二维数组



      5.1二维数组的定义及初始化


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

       基本语法:


数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };
import java.util.Arrays;
public static void main11(String[] args) {
    int[][] array = {{1,2,3},{4,5,6}};
    int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
    int[][] array3 = new int[2][3];
    //行 不能省略   报错
    //int[][] array4 = new int[][3];
    //不规则二维数组
    int[][] array5 = new int[2][];
     System.out.println(Arrays.toString(array));
     System.out.println(Arrays.toString(array2));
     System.out.println(Arrays.toString(array3));
}

2baa04910996443a8950fe89729e3c18.png4cfeaa217a1d46ffb5f2e93bc76aa054.png



       array,array2,array3存放相应数组的地址。


      5.2 二维数组的遍历


               for循环遍历二维数组

import java.util.Arrays;
        public static void main(String[] args) {
            int[][] array = {{1,2,3},{4,5,6}};
            System.out.println(array[0][1]);
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 3; j++) {
                    System.out.print(array[i][j] +" ");
                }
                System.out.println();
            }
        }

95c8a30562204428a63cec3eb6ebacba.png


                foreach遍历二维数组


import java.util.Arrays;
    public static void main13(String[] args) {
    int[][] array = {{1,2,3},{4,5,6}};
    System.out.println(array.length);
    System.out.println(array[0].length);
    System.out.println(array[1].length);
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array[i].length; j++) {
            System.out.print(array[i][j] +" ");
        }
        System.out.println();
    }
    System.out.println("====");
        //深度(全部)转化为字符串
    System.out.println(Arrays.deepToString(array));
    System.out.println("====");
        //foreach循环
    for(int[] tmp : array) {
        for(int x : tmp) {
            System.out.print(x+" ");
        }
        System.out.println();
    }
}

      a357b494a375462781392c85f62a9039.png

17fa7363ac754bfd8e1d7e6397371a32.png

     

a3af96926d8c4fb5a265033a9bb271bb.png

     

        不规则二维数组的初始化和遍历


 

import java.util.Arrays;
     public static void main(String[] args) {
         int[][] array = new int[2][];
         array[0] = new int[]{1,2};
         array[1] = new int[]{1,2,3};
         for (int i = 0; i < array.length; i++) {
             for (int j = 0; j < array[i].length; j++) {
                 System.out.print(array[i][j] +" ");
             }
             System.out.println();
         }
     }

ae4e6643fb064de4be0b957af5375983.png

目录
相关文章
|
15天前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
24天前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
31 4
|
24天前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
22 2
|
1月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
|
1月前
|
Oracle Java 关系型数据库
重新定义 Java 对象相等性
本文探讨了Java中的对象相等性问题,包括自反性、对称性、传递性和一致性等原则,并通过LaptopCharger类的例子展示了引用相等与内容相等的区别。文章还介绍了如何通过重写`equals`方法和使用`Comparator`接口来实现更复杂的相等度量,以满足特定的业务需求。
21 3
|
1月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
43 9
|
1月前
|
存储 Java 编译器
Java集合定义其泛型
Java集合定义其泛型
18 1
|
1月前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
22 3
|
1月前
|
存储 Java 程序员
【一步一步了解Java系列】:何为数组,何为引用类型
【一步一步了解Java系列】:何为数组,何为引用类型
23 1
|
1月前
|
存储 XML Java
如何在 Java 中将常见文档转换为 PNG 图像数组
如何在 Java 中将常见文档转换为 PNG 图像数组
14 1