2016-05-16 14 views
-4

Ich hätte gedacht, dass diese Frage schon einmal beantwortet worden wäre, aber ich kann nichts darüber finden.Warum gibt ArrayList-Liste (0, n) eine Liste der Größe n zurück?

Meine Frage ist, wie der Titel sagt, warum erstellt die Erstellung einer Unterliste von Index zu Index nicht die Gesamtzahl der Indizes, die ich erwarten würde?

Ein detaillierteres Beispiel:

List slice = points.sublist(20, 48); 
Log.i(TAG, slice.size()); 

ich das Protokoll 29 zurück in dem obigen Beispiel erwarten würde, aber in der Tat gibt es 28

Warum dies geschieht und was ist die richtige Lösung dafür? Hinzufügen von +1 zum zweiten Index oder -1 zum ersten Index?

Antwort

1

Es ist eindeutig im documentation geschrieben, die SUBLIST:

public List subList (int fromindex, int toIndex)

Gibt eine Ansicht des Teils dieser Liste zwischen dem fromindex angegeben, inklusive und toIndex, exklusiv.

Ihre Frage zu beantworten, soweit ich verstehe, könnte man +1 auf den zweiten Parameter hinzugefügt werden soll, weil es in der Unterliste nicht enthalten ist.

+0

Es würde scheinen, ich war damals dumm. Ich habe die Dokumentation unzählige Male überprüft und das Wort "exklusiv" vermisst, scheint es ... Danke. – nineteeneightyeight

+0

@nineeeneightyeight Wenn Sie die Dokumentation überprüft haben, würde ich empfehlen, dass Sie diese Frage als Forschung, die Sie getan haben, einfügen. Wenn Sie Ihre Recherche schreiben, haben Sie diese Notiz wahrscheinlich eher in der Dokumentation gesehen. Zweitens, wenn es sich so verhält, wie Sie es getan haben, bevor Sie Ihre Frage gepostet haben, ist es weniger wahrscheinlich, dass es abgelehnt wird. – Ironcache

0

Der erste Index ist inklusive, der andere ist exklusiv. a.subList (0, n) gibt eine Liste Elemente enthält 0,1,2, ..., n-1

Wie in den

0

Aus der Dokumentation von subListdocumentation erklärt:

/** 
* Returns a {@code List} of the specified portion of this {@code List} from the given start 
* index to the end index minus one. The returned {@code List} is backed by this 
* {@code List} so changes to it are reflected by the other. 
* 
* @param start 
*   the index at which to start the sublist. 
* @param end 
*   the index one past the end of the sublist. 
* @return a list of a portion of this {@code List}. 
* @throws IndexOutOfBoundsException 
*    if {@code start < 0, start > end} or {@code end > 
*    size()} 
*/ 
public List<E> subList(int start, int end); 

Wie Sie sehen können, ist der end Parameter "der Index hinter dem der Unterliste". Deshalb, wenn Sie "Stop bei 48" sagen, kopiert es tatsächlich das Element 47 und stoppt dann.

1

Ich würde das Protokoll erwarten zurückzukehren 29 in dem obigen Beispiel

Nicht wirklich, nach dem Doc

subList (int   fromindex, int   toIndex)

Gibt eine Ansicht des Teils dieser Liste zwischen den angegebenen
fromIndex, inklusive, und toIndex, exklusiv. (Wenn
fromIndex und toIndex gleich sind, ist die zurückgegebene Liste leer.) Die zurückgegebene Liste wird durch diese Liste gesichert, so dass nicht strukturelle Änderungen in der zurückgegebenen Liste in dieser Liste widergespiegelt werden und umgekehrt.Die zurückgegebene Liste unterstützt alle optionalen Listenoperationen von dieser Liste unterstützt

1

Doc:

subList (int fromindex, int toIndex) eine Ansicht des Teils von dieser Liste Kosten zwischen dem angegebenen fromIndex, einschließlich, und toIndex, exklusive.

Allgemeine Anwendungsfall für das, was Sie fordern ist:

points.sublist(20, points.size()); 
0

die javadoc Unter Berücksichtigung in diesem Punkt ziemlich klar, das extrahierte sublist der fromindex ist mit und ohne Berücksichtigung der toIndex in List.subList (fromindex , toIndex)

Daher wird subList (0,1) eine Liste von nur einem Element zurückgeben: das erste.

Sublist javadoc