【JAVA】数组练习

简介: 【JAVA】数组练习

1. 数组转字符串


toString() :可以将Array 对象转换为字符串。

//语法格式:
arraylist.toString()


实例1:

import java.util.Arrays;//调用Arrays类,包含了常用的数组操作
public class test {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        String newArr = Arrays.toString(arr);
        System.out.println(newArr);
    }
}


🍤 运行结果:


5d9302352fc5a1eb6ec535459bc3d2cc_924af81e18a7489b9a2788a261b82140.png


实例2:


import java.util.ArrayList;
public class test {
    public static void main(String[] args) {
          // 创建一个动态数组
           ArrayList<String> sites = new ArrayList<>();
            sites.add("Runoob");
            sites.add("Google");
            sites.add("Wiki");
            sites.add("Taobao");
            System.out.println("网站列表: " + sites);
             // 将ArrayList转换为String类型
             String list = sites.toString();
             System.out.println("String: " + list);
            }

🍤 运行结果:


6326d6782ae5736ab0a6587bfeae3703_e23857a54aa6490592a7d6c0c251947b.png


2. 数组拷贝


实例1:

import java.util.Arrays;
public class test {
    public static void func(){
        // newArr和arr引用的是同一个数组
        // 因此newArr修改空间中内容之后,arr也可以看到修改的结果
        int[] arr = {1,2,3,4,5,6};
        int[] newArr = arr;
        newArr[0] = 10;
        System.out.println("newArr: " + Arrays.toString(arr));
}
public static void main(String[] args) {
        func();
    }

🍤 图解:


28b3dda749d37334f52ad86dd40786e3_c9476659ceee4a31ba8d1ed0814cb204.png


🍤 运行结果:


44af0b4ff844b936dcc9423b6767d46e_b9b20e09893d4f1c81d1fad7bee4486e.png

实例2:使用Arrays中copyOf方法完成数组的拷贝


import java.util.Arrays;
public class test {
    public static void func(){
        int[] arr = {1,2,3,4,5,6};
        int[] newArr = arr;
        // copyOf方法在进行数组拷贝时,创建了一个新的数组
        // arr和newArr引用的不是同一个数组
        arr[0] = 1;
        newArr = Arrays.copyOf(arr, arr.length);
        System.out.println("newArr: " + Arrays.toString(newArr));
    }
  public static void main(String[] args) {
        func();
    }
 }

🍤 图解:


0f8c6d82f5a3d94b9a499a6ddfb0621c_10654646b57b4ea29b8bdf7f778e05b1.png


🍤 运行结果:


c48a265914b959b20b570707a595f8af_8e8e98f417b247ec82f1cb25cc176bcd.png

实例3:拷贝某个范围


import java.util.Arrays;
public class test {
    public static void func(){
        int[] arr = {1,2,3,4,5,6};
        int[] newArr = arr;
        int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);
        System.out.println("newArr2: " + Arrays.toString(newArr2));
     }
     public static void main(String[] args) {
        func();
    }
}

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


模拟拷贝数组:

import java.util.Arrays;
public class test {
  //copyOf方法拷贝数组
    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[] a={1,4,5,6,9};
        int[] Array=copyOf(a);
        for(int i=0;i<Array.length;i++) {
            System.out.println(Array[i]);
        }
    }

🍤 运行结果:

1411816a87e13c76e1525b1c88c28557_aa8f893253cd493aab6e6f35799f5ca1.png



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


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


public class test {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        System.out.println(avg(arr));//输出:3.0
    }
    public static double avg(int[] arr) {
        int sum = 0;
        for (int x : arr) {//遍历数组
            sum += x;
        }
        return (double)sum / (double)arr.length;
    }
}


4. 顺序查找数组中指定元素


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


import java.util.Scanner;
public class test {
    public static void main(String[] args) {
         int[] arr = {1,2,3,10,5,6};
        Scanner scanner=new Scanner(System.in);//创建一个Scanner对象
        int num=scanner.nextInt();//读取用户输入
        System.out.println(find(arr, num));
    }
    public static int find(int[] arr, int data) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == data) {
                return i;//返回下标
            }
        }
        return -1; // 表示没有找到
    }
}

🍤 运行结果:


defe5cc932409c1b660432b4e1e62deb_434d95722eec45e9828a8caf15fa3697.png


5. 二分查找数组中指定元素


二分查找仅适用于有序查找


什么是有序数组?

有序分为 “升序” 和 “降序”

如 1 2 3 4 , 依次递增即为升序.

如 4 3 2 1 , 依次递减即为降序


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


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

代码示例:


import java.util.Scanner;
public class test {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        System.out.print("请输入你要查找的数字:");
        Scanner scanner=new Scanner(System.in);//创建一个Scanner对象
        int num=scanner.nextInt();
        System.out.println(binarySearch(arr, num));
    }
    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;
    }
}

🍤 运行结果:


3d8684e88db31242bd2a749ba77daccd_adce3a7d54c04a93b805fa797a18fe98.png


🍩随着数组元素个数越多, 二分的优势就越大


二分查找–图文详解 - 这篇文章是用C语言介绍的二分查找,虽然语言不同,但思想都是一样的,而且是以图的形式详细描述二分查找的过程,大家可以去看看~


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


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


算法思路: 假设排升序


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

009a93d8b40df6fefb70fd0180faea10_de5225940c9046b1856cbad5ae1cae83.png

import java.util.Arrays;
public class test {
public static void main(String[] args) {
        int[] arr = {9,5,7,8,6,6,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;
                }
            }
        } 
    }
}

🍤 运行结果:


8bd10fbf40ebc47753e3bb0e579bd939_6d2864524df64b14980e664014efb021.png


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


import java.util.Arrays;
public class test {
    public static void main(String[] args) {
        int[] arr = {9,5,7,8,6,6,7};
        Arrays.sort(arr);//升序排序
        System.out.println(Arrays.toString(arr));
    }


7. 数组逆序


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


算法思路:

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


import java.util.Arrays;
public class test {
    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--;
        }
    }
}

🍤 运行结果:

979a1dafaa8f591ad6b7a40b093fc5fc_33845891d8e14b8aaee82309ff6dd4ab.png


相关文章
|
2月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
33 4
|
2月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
40 2
|
2月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
95 2
|
2月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
53 9
|
2月前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
26 3
|
2月前
|
存储 算法 Java
Java一分钟之-数组的创建与遍历
数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
31 6
|
2月前
|
存储 Java 程序员
【一步一步了解Java系列】:何为数组,何为引用类型
【一步一步了解Java系列】:何为数组,何为引用类型
34 1
|
2月前
|
存储 XML Java
如何在 Java 中将常见文档转换为 PNG 图像数组
如何在 Java 中将常见文档转换为 PNG 图像数组
18 1
|
2月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
39 0
|
2月前
|
存储 机器学习/深度学习 Java
【Java】数组详解
【Java】数组详解
31 0