专业的JAVA编程教程与资源

网站首页 > java教程 正文

二十一、Java数组的常用操作与方法

temp10 2024-09-05 23:36:45 java教程 11 ℃ 0 评论

Java中的数组是对象,继承自Object类,因此可以使用Object类的方法,如toString(), hashCode(), 和 equals(Object obj) 等。这些方法对于数组来说可能不是很有用,因为它们是基于对象的引用而不是内容来比较的。在处理数组时,通常需要使用循环来遍历和操作数组元素。

数组常用操作:

二十一、Java数组的常用操作与方法

序号

操作

1

获取数组长度

2

访问/修改数组元素

3

数组填充

4

数组复制

5

数组排序

6

数组转换为字符串

7

数组反转

8

查找元素

9

数组合并

获取数组长度:

int[] array = new int[10];
int length = array.length; // 获取数组长度

访问/修改数组元素:

int[] array = {1, 2, 3, 4, 5, 6}
array[0]= 0; // 修改数组中索引为0的元素值为0
int element = array[2]; // 访问数组中索引为2的元素

数组填充:

public class Main {
    public static void main(String[] args) {

  // 定义并初始化一个整型数组
        int[] numbers = new int[5];

        // 使用Arrays.fill()方法填充整个数组为特定值
        Arrays.fill(numbers, 10);

        // 输出填充后的数组
        for (int num : numbers) {
            System.out.print(num + " ");
        }
        // 输出: 10 10 10 10 10
		}
}

数组复制:

在Java中,有多种方法可以用来复制数组,以下分别给出使用`System.arraycopy()`、`Arrays.copyOf()`和`Arrays.copyOfRange()`方法进行数组复制的案例:

示例1:使用 `System.arraycopy()` 方法复制数组

public class Main {
    public static void main(String[] args) {
        // 创建原始数组
        int[] originalArray = {1, 2, 3, 4, 5};

        // 创建目标数组,大小足够容纳原始数组的所有元素
        int[] copiedArray = new int[originalArray.length];

        // 使用 System.arraycopy() 进行复制
        System.arraycopy(originalArray, 0, copiedArray, 0, originalArray.length);

        // 输出复制后的数组
        for (int item : copiedArray) {
            System.out.print(item + " ");
        }
        // 输出: 1 2 3 4 5
    }
}

示例2:使用 `Arrays.copyOf()` 方法复制整个数组:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 创建原始数组
        int[] originalArray = {1, 2, 3, 4, 5};

        // 使用 Arrays.copyOf() 进行复制,同时可以选择扩大或缩小目标数组的大小
        int[] copiedArray = Arrays.copyOf(originalArray, originalArray.length);

        // 输出复制后的数组
        for (int item : copiedArray) {
            System.out.print(item + " ");
        }
        // 输出: 1 2 3 4 5
    }
}

// 如果想复制后得到更大的数组,只需要调整第二个参数即可
int[] largerCopiedArray = Arrays.copyOf(originalArray, originalArray.length + 5);

示例3:使用 `Arrays.copyOfRange()` 方法复制数组的部分范围:


import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 创建原始数组
        int[] originalArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

        // 使用 Arrays.copyOfRange() 复制从索引2开始的三个元素
        int fromIndex = 2;
        int toIndex = fromIndex + 3;
        int[] partialCopyArray = Arrays.copyOfRange(originalArray, fromIndex, toIndex);

        // 输出复制的部分数组
        for (int item : partialCopyArray) {
            System.out.print(item + " ");
        }
        // 输出: 2 3 4
    }
}

数组排序:

在Java中,数组排序可以使用`java.util.Arrays`类中的`sort()`方法来实现。以下是几种不同的数组排序案例:

示例1:整型数组升序排序

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 创建一个整型数组
        int[] numbers = {5, 3, 8, 1, 9, 2, 7, 4, 6};

        // 使用Arrays.sort()方法进行排序
        Arrays.sort(numbers);

        // 输出排序后的数组
        for (int number : numbers) {
            System.out.print(number + " ");
        }
        // 输出:1 2 3 4 5 6 7 8 9
    }
}

示例2:浮点型数组排序

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 创建一个浮点型数组
        double[] doubles = {3.5, 1.2, 9.8, 2.1, 5.3};

        // Arrays.sort()也可以用于排序浮点数数组
        Arrays.sort(doubles);

        // 输出排序后的数组
        for (double d : doubles) {
            System.out.print(d + " ");
        }
        // 输出:1.2 2.1 3.5 5.3 9.8
    }
}

示例3:对象数组排序(按照对象属性)

假设有一个`Person`类,包含`name`和`age`属性,我们可以根据年龄对其进行排序:

import java.util.Arrays;
import java.util.Comparator;

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建一个Person对象数组
        Person[] people = {
                new Person("Alice", 25),
                new Person("Bob", 30),
                new Person("Charlie", 20),
                new Person("David", 35)
        };

        // 自定义比较器按年龄排序
        Comparator<Person> byAge = Comparator.comparingInt(Person::getAge);

        // 使用Arrays.sort()方法结合比较器排序
        Arrays.sort(people, byAge);

        // 输出排序后的数组
        for (Person person : people) {
            System.out.println(person);
        }
    }
}

// 输出按年龄升序排列的人名和年龄信息

数组转换为字符串:

在Java中,将数组转换为字符串有几种常见的方式,下面列举几个具体的案例:

示例1:使用 `Arrays.toString()` 方法

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 创建一个整型数组
        int[] numbers = {1, 2, 3, 4, 5};

        // 使用Arrays.toString()方法将数组转换为字符串
        String strNumbers = Arrays.toString(numbers);

        // 输出转换后的字符串
        System.out.println(strNumbers); // 输出:[1, 2, 3, 4, 5]
    }
}

示例2:使用 `toString()` 和 `join()` 方法(Java 8+,针对字符数组)

public class Main {
    public static void main(String[] args) {
        // 创建一个字符数组
        char[] chars = {'H', 'e', 'l', 'l', 'o'};

        // 使用String.join()方法将字符数组转换为字符串(Java 8+)
        String strChars = String.join("", chars);

        // 输出转换后的字符串
        System.out.println(strChars); // 输出:Hello
    }
}

注意:`String.join()` 不适用于普通对象数组,它主要用于将字符数组或其他可迭代对象转换为字符串,且不需要额外的字符作为分隔符。

示例3:使用 `StringBuilder` 或 `StringBuffer` 拼接

public class Main {
    public static void main(String[] args) {
        // 创建一个整型数组
        int[] integers = {1, 2, 3, 4, 5};

        // 使用StringBuilder进行转换
        StringBuilder sb = new StringBuilder();
        for (int i : integers) {
            sb.append(i).append(", ");
        }
        // 移除最后一个逗号和空格
        if (sb.length() > 0) {
            sb.setLength(sb.length() - 2);
        }
        String strIntegers = sb.toString();

        // 输出转换后的字符串
        System.out.println(strIntegers); // 输出:1, 2, 3, 4, 5
    }
}

示例4:自定义分隔符(例如用逗号分隔)

public class Main {
    public static void main(String[] args) {
        // 创建一个字符串数组
        String[] names = {"Alice", "Bob", "Charlie"};

        // 使用StringBuilder和自定义分隔符
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < names.length; i++) {
            sb.append(names[i]);
            if (i != names.length - 1) {
                sb.append(", "); // 添加逗号和空格作为分隔符
            }
        }
        String strNames = sb.toString();

        // 输出转换后的字符串
        System.out.println(strNames); // 输出:Alice, Bob, Charlie
    }
}

数组反转:

public class Main {
    public static void main(String[] args) {
        // 创建一个整型数组
        int[] numbers = {1, 2, 3, 4, 5};

        // 打印反转前的数组
        System.out.println("Before reversal: " + Arrays.toString(numbers));

        // 调用反转方法
        reverseArray(numbers);

        // 打印反转后的数组
        System.out.println("After reversal: " + Arrays.toString(numbers));
    }

    // 定义反转数组的方法
    public static void reverseArray(int[] arr) {
        int start = 0;
        int end = arr.length - 1;

        while (start < end) {
            // 临时变量保存arr[start]的值,然后将其与arr[end]交换
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;

            // 更新边界指针
            start++;
            end--;
        }
    }
}

// 输出:
// Before reversal: [1, 2, 3, 4, 5]
// After reversal: [5, 4, 3, 2, 1]

查找元素:

在Java中查找数组中的元素,可以手动编写循环进行查找,也可以使用Java 8及其以后版本的Stream API进行查找。以下是两种不同方式查找数组元素的案例:

示例1:使用循环查找数组中的元素

public class Main {
    public static void main(String[] args) {
        // 创建一个整型数组
        int[] numbers = {1, 2, 3, 4, 5, 6};

        // 要查找的目标元素
        int target = 4;

        // 初始化查找结果为-1(表示未找到)
        int index = -1;

        // 遍历数组查找目标元素
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] == target) {
                index = i;
                break; // 找到后跳出循环
            }
        }

        // 输出结果
        if (index != -1) {
            System.out.println("Element " + target + " found at index " + index);
        } else {
            System.out.println("Element " + target + " not found in the array");
        }
    }
}

示例2:使用Java 8 Stream API查找数组元素的索引

import java.util.Arrays;
import java.util.OptionalInt;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        // 同样的整型数组
        int[] numbers = {1, 2, 3, 4, 5, 6};

        // 目标元素
        int target = 4;

        // 使用Stream API查找元素的索引
        OptionalInt indexOptional = IntStream.range(0, numbers.length) .filter(i -> numbers[i] == target) .findFirst();

        // 输出结果
        if (indexOptional.isPresent()) {
            System.out.println("Element " + target + " found at index " + indexOptional.getAsInt());
        } else {
            System.out.println("Element " + target + " not found in the array");
        }
    }
}

在示例2中,使用了`IntStream.range`创建了一个表示数组索引的流,然后通过`filter`方法筛选出与目标值相等的元素索引,并使用`findFirst`找出第一个匹配项(如果有)。由于`findFirst`返回的是`OptionalInt`类型,需要通过`isPresent`检查是否有找到元素,然后使用`getAsInt`获取索引值。

数组合并:

public class Main {
    public static void main(String[] args) {
        // 创建两个整数数组
        int[] array1 = {1, 2, 3};
        int[] array2 = {4, 5, 6};

        // 合并数组
        int[] mergedArray = new int[array1.length + array2.length];
        
        // 将array1的元素复制到mergedArray
        System.arraycopy(array1, 0, mergedArray, 0, array1.length);
        
        // 将array2的元素复制到mergedArray适当的位置
        System.arraycopy(array2, 0, mergedArray, array1.length, array2.length);

        // 输出合并后的数组
        for (int num : mergedArray) {
            System.out.print(num + " ");
        }
    }
}

// 输出结果:1 2 3 4 5 6

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表