Slechts een deel van een array in Java krijgen?

Ik heb een array van gehele getallen in Java, ik zou er maar een deel van willen gebruiken. Ik weet dat je in Python zoiets als deze array kunt doen [index:] en het retourneert de array uit de index. Is zoiets mogelijk in Java.


Antwoord 1, autoriteit 100%

De lengte van een array in Java is onveranderlijk. U moet dus het gewenste deel als een nieuwe array kopiëren.
Gebruik de methode copyOfRangevan java. util.Arraysklasse:

int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);

startIndexis de initiële index van het bereik dat moet worden gekopieerd, inclusief.
endIndexis de uiteindelijke index van het te kopiëren bereik, exclusief. (Deze index kan buiten de array liggen)

Bijvoorbeeld:

  //index   0   1   2   3   4
int[] arr = {10, 20, 30, 40, 50};
Arrays.copyOfRange(arr, 0, 2);          // returns {10, 20}
Arrays.copyOfRange(arr, 1, 4);          // returns {20, 30, 40}
Arrays.copyOfRange(arr, 2, arr.length); // returns {30, 40, 50} (length = 5)

Antwoord 2, autoriteit 7%

Je zou je array als een lijst kunnen inpakken en er een sublijst van kunnen aanvragen.

MyClass[] array = ...;
List<MyClass> subArray = Arrays.asList(array).subList(index, array.length);

Antwoord 3, autoriteit 5%

Ja, u kunt Arrays.copyOfRange

Het doet ongeveer hetzelfde (let op: er is een kopie: u wijzigt de initiële array niet).


Antwoord 4, autoriteit 2%

Je kunt proberen:

System.arraycopy(sourceArray, 0, targetArray, 0, targetArray.length);// copies whole array
// copies elements 1 and 2 from sourceArray to targetArray
System.arraycopy(sourceArray, 1, targetArray, 0, 2); 

Zie javadoc voor systeem.


Antwoord 5, autoriteit 2%

Als u Java 1.6 of hoger gebruikt, kunt u Arrays.copyOfRangeom een deel van de array te kopiëren. Van de javadoc:

Kopieert het opgegeven bereik van de opgegeven array naar een nieuwe array. De initiële index van het bereik (van) moet tussen nul en original.lengthliggen, inclusief. De waarde bij original[from]wordt in het initiële element van de kopie geplaatst (tenzij from == original.lengthof from == to). Waarden van volgende elementen in de originele array worden in volgende elementen in de kopie geplaatst. De uiteindelijke index van het bereik (to), die groter dan of gelijk moet zijn aan from, mag groter zijn dan original.length, in in welk geval falsewordt geplaatst in alle elementen van de kopie waarvan de index groter is dan of gelijk is aan original.length - from. De lengte van de geretourneerde array is to - from.

Hier is een eenvoudig voorbeeld:

/**
 * @Program that Copies the specified range of the specified array into a new 
 * array.
 * CopyofRange8Array.java 
 * Author:-RoseIndia Team
 * Date:-15-May-2008
 */
import java.util.*;
public class CopyofRange8Array {
    public static void main(String[] args) {
       //creating a short array
       Object T[]={"Rose","India","Net","Limited","Rohini"};
        // //Copies the specified  short array upto specified range,
        Object T1[] = Arrays.copyOfRange(T, 1,5);
        for (int i = 0; i < T1.length; i++) 
            //Displaying the Copied short array upto specified range
            System.out.println(T1[i]);
    }
}

Antwoord 6

Bekijk copyOfRange; en voorbeeld:

int[] arr2 = Arrays.copyOfRange(arr,0,3);

Antwoord 7

Je kunt zoiets als dit gebruiken: Arrays#copyOfRange


Antwoord 8

public static int[] range(int[] array, int start, int end){
        int returner[] = new int[end-start];
        for(int x = 0; x <= end-start-1; x++){
            returner[x] = array[x+start];
        }
        return returner;
    }

dit is een manier om hetzelfde te doen als Array.copyOfRange, maar zonder iets te importeren


Antwoord 9

U kunt de methode subList(int fromIndex, int toIndex)gebruiken op uw gehele getallen arr, ongeveer als volgt:

import java.util.ArrayList;
import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(4);
        List<Integer> partialArr = arr.subList(1, 3);
        // print the subArr
        for (Integer i: partialArr)
            System.out.println(i + " ");
    }
}

Uitvoer zal zijn: 2 3.

Merk op dat de methode subList(int fromIndex, int toIndex)min 1 uitvoert op de 2e variabele die het ontvangt (var2 – 1), ik weet niet precies waarom, maar dat is wat er gebeurt, misschien om de kans te verkleinen dat de grootte van de array wordt overschreden.

Other episodes