【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


相关文章
|
19天前
|
Java
|
14天前
|
Java
Java数组的应用场景
Java数组的应用场景
26 1
|
14天前
|
存储 机器学习/深度学习 Java
Java数组
Java数组
23 1
|
11天前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
17 0
|
18天前
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
39 0
|
19天前
|
存储 搜索推荐 算法
在 Java 中如何更改数组列表的顺序
【8月更文挑战第23天】
12 0
|
19天前
|
存储 安全 Java
在 Java 中如何存储数组列表
【8月更文挑战第23天】
20 0
|
19天前
|
Java API
如何在 Java 中将 Arraylist 变成数组?
【8月更文挑战第23天】
22 0
|
19天前
|
Java API
如何在 Java 中将 Arraylist 变成数组?
【8月更文挑战第23天】
23 0
|
19天前
|
存储 Java API
如何在 Java 中填充数组列表?
【8月更文挑战第23天】
10 0