Rumah  >  Artikel  >  Java  >  Apakah kaedah penghirisan tatasusunan di Jawa?

Apakah kaedah penghirisan tatasusunan di Jawa?

王林
王林ke hadapan
2023-05-20 18:22:193098semak imbas

1. Soalan

Menghiris tatasusunan ialah kaedah mendapatkan sub-tatasusunan bagi tatasusunan yang diberikan. Katakan, a[] ialah tatasusunan. Ia mempunyai 8 elemen, diindeks daripada a[0] hingga a[7]

int a[] = {8, 9, 4, 6, 0, 11, 45, 21}

Kita perlu mencari subset indeks tatasusunan antara a[3] hingga a[6 ]. startIndex sepadan dengan a[3], dan endIndex sepadan dengan a[6]. Oleh itu, kita mendapat kepingan berikut

a[] = {6, 0, 11, 45}

Terdapat tiga cara untuk mencari kepingan tatasusunan:

  1. Dengan menyalin elemen

  2. Dengan menggunakan kaedah copyOfRange()

  3. Menggunakan Java 8 strim

2. Kaedah

1) Dengan menyalin elemen

  • Mula-mula, kita mencari indeks mula dan akhir tatasusunan yang diberikan.

  • Selepas itu, kami mencipta tatasusunan kosong (tatasusunan kepingan) saiz (endIndex - startIndex).

  • Dari tatasusunan yang diberikan, salin elemen (dari startIndex) ke tatasusunan hirisan. Akhir sekali, cetak tatasusunan hirisan.

public class Test {
    public static void main(String[] args) {
        int[] array = {0,1,2,3,4,5,6,7,8,9};
        int startIndex = 3, endIndex = 8;
        int[] slicedArray = getSlice(array, startIndex, endIndex + 1);
        System.out.println("Slice of Array: "+ Arrays.toString(slicedArray));
    }
    public static int[] getSlice(int[] array, int startIndex, int endIndex)
    {
        int[] slicedArray = new int[endIndex - startIndex];
        //将数组元素从原始数组复制到新创建的切片数组
        for (int i = 0; i < slicedArray.length; i++)
        {
            slicedArray[i] = array[startIndex + i];
        }
        return slicedArray;
    }
}

Hasilnya adalah seperti berikut:

Slice of Array: [3, 4, 5, 6, 7, 8]

2) Dengan menggunakan kaedah copyOfRange()

  • copyOfRange()  kaedah tergolong dalam Java Arrays Kelas.

  • Ia akan 数组的指定范围复制到新创建的数组(切片数组)中 dan mengembalikan tatasusunan yang baru dibuat yang mengandungi julat yang ditentukan daripada tatasusunan asal.

  • Mencipta kepingan tatasusunan mengambil masa O(n) dan menyimpan elemen memerlukan ruang O(n) , dengan n ialah bilangan elemen dalam tatasusunan yang terhasil.

public static int[] copyOfRange(int[] original, int from, int to)

Ia membuang pengecualian berikut:

  • ArrayIndexOutOfBoundsException: jika daripada kurang daripada 0 atau jika daripada lebih besar daripada panjang tatasusunan yang ditentukan.

  • IllegalArgumentException: Jika parameter daripada lebih besar daripada kepada.

  • NullPointerException: Jika tatasusunan yang diberikan kosong.

public class Test {
    public static void main(String[] args) {
        int[] array = {0,1,2,3,4,5,6,7,8,9};
        int startIndex = 3, endIndex = 8;
        int[] slicedArray = getSlice(array, startIndex, endIndex + 1);
        System.out.println("Slice of Array: "+ Arrays.toString(slicedArray));
    }
    public static int[] getSlice(int[] array, int startIndex, int endIndex)
    {
        int[] slicedArray = Arrays.copyOfRange(array, startIndex, endIndex);
        return slicedArray;
    }
}

Hasilnya adalah seperti berikut:

Slice of Array: [3, 4, 5, 6, 7, 8]

3) Gunakan Java 8 streams

dengan menggunakan langkah berikut

  • Kita boleh mencari kepingan tatasusunan menggunakan Java 8 Stream.

  • Pertama, cari tatasusunan startIndex dan endIndex.

  • Gunakan kaedah julat() untuk menukar elemen (dalam julat) kepada strim asal.

  • Gunakan kaedah map() untuk memetakan elemen yang ditentukan dalam tatasusunan yang ditentukan.

  • Tukar tatasusunan dipetakan kepada tatasusunan dengan memanggil kaedah toArray(). Cetak kepingan

public class Test {
    public static void main(String[] args) {
        int[] array = {0,1,2,3,4,5,6,7,8,9};
        int startIndex = 3, endIndex = 8;
        int[] slicedArray = getSlice(array, startIndex, endIndex + 1);
        System.out.println("Slice of Array: "+ Arrays.toString(slicedArray));
    }
    public static int[] getSlice(int[] array, int startIndex, int endIndex)
    {
        //获取数组的切片并将其存储在数组 slcarray[] 中
        // range() 方法将元素转换为流
        // 使用 lambda 表达式获取 int 流的元素
        // 使用 toArray() 方法将映射元素转换为切片数组
        int[] slcarray = IntStream.range(startIndex, endIndex).map(i -> array[i]).toArray();
        return slcarray;
    }
}

dan hasilnya adalah seperti berikut:

Slice of Array: [3, 4, 5, 6, 7, 8]

Atas ialah kandungan terperinci Apakah kaedah penghirisan tatasusunan di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam