Perché le API delle raccolte Java non hanno un ultimo metodo? [chiuso]

19

Questo è per le raccolte ordinate, ad es. java.util.List. Perché i progettisti di lingue non hanno incluso un ultimo metodo? Le uniche ragioni per cui posso pensare sono:

  • ambiguità quando la raccolta è vuota (restituisce null o genera eccezioni)
  • API bloat

Altri motivi?

    
posta three-cups 19.04.2011 - 21:38
fonte

4 risposte

13

L'API bloat è probabilmente la risposta. Dalla mia esperienza, l'unica volta in cui ho avuto bisogno di questa funzionalità, una coda o uno stack era la struttura dati corretta per il lavoro con il metodo appropriato.

    
risposta data 19.04.2011 - 22:57
fonte
16

un metodo last() è semplice quanto list.get(list.size()-1) , proprio come non esiste il metodo first() o fifth() . Non è così difficile da sintetizzare ed è una specializzazione. Puoi anche reverse() dell'elenco e list.get(0) che assegnerà l'elemento last . Le cose che sono facili da fare, di solito non hanno i loro metodi specializzati.

import java.util.ArrayList;
import java.util.List;

public class Main
{
    public static void main(String[] args)
    {
        final List<String> l = new ArrayList<String>();

        l.add("A");
        l.add("B");
        l.add("Z");

        System.out.println("l.get(0) = " + l.get(0));
        System.out.println("l.get(l.size()-1) = " + l.get(l.size() - 1));
    }
}

produce il seguente output

l.get(0) = A
l.get(l.size()-1) = Z

è anche presuntuoso presumere che tutto ciò che implementa l'interfaccia List abbia effettivamente il concetto di last() qualsiasi.

    
risposta data 19.04.2011 - 21:51
fonte
5

Il java.util.LinkedList definisce i metodi getLast() e getFirst() . Sfortunatamente questi metodi non sono definiti in una delle sue interfacce, quindi devi usare il tipo LinkedList. Se sei interessato solo all'ultimo elemento, potresti prendere in considerazione l'utilizzo del metodo java.util.Queue dell'interfaccia peek() . LinkedList implementa la coda.

    
risposta data 09.05.2012 - 08:59
fonte
0

Fondamentalmente devi chiedere il size() per un for -loop o iterarlo chiedendo il suo iteratore e usarlo in un istante o do-loop. Usa quello adatto al tuo scopo.

L'iteratore sa a un certo punto se ci sono più voci e ti permette di ottenere il prossimo se c'è. Quindi ripetere fino a "più voci?" fallisce.

Vedi la sezione "Traversing Collections" all'indirizzo link

    
risposta data 19.04.2011 - 21:47
fonte

Leggi altre domande sui tag