Java >> Java tutorial >  >> Tag >> implements

Er der et sæt, der bevarer en indsættelsesrækkefølge, som også implementerer List?

TreeSet er sorteret efter elementrækkefølge; LinkedHashSet bevarer indsættelsesrækkefølgen. Forhåbentlig er en af ​​dem, hvad du ledte efter.

Du har angivet, at du vil være i stand til at indsætte på en vilkårlig placering, formoder jeg, at du bliver nødt til at skrive din egen - bare opret en klasse, der indeholder en HashSet<T> og en ArrayList<T>; Når du tilføjer et element, skal du kontrollere, om det er i sættet eller ej, før du tilføjer det til listen.

Alternativt tilbyder Apaches commons-collections4 ListOrderedSet og SetUniqueList , som opfører sig ens og bør opfylde de givne krav.


LinkedHashSet er svaret.

Iterationsrækkefølge og unikhed.

http://download.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html


Mener du som LinkedHashSet ? Dette bevarer rækkefølgen af ​​indtastning, men tillader ikke dubletter.

IMHO, det er et usædvanligt krav, men du kan skrive en liste uden dubletter.

class SetList<T> extends ArrayList<T> {
    @Override
    public boolean add(T t) {
        return !super.contains(t) && super.add(t);
    }

    @Override
    public void add(int index, T element) {
        if (!super.contains(element)) super.add(index, element);
    }

    @Override
    public boolean addAll(Collection<? extends T> c) {
        boolean added = false;
        for (T t : c)
            added |= add(t);
        return added;
    }

    @Override
    public boolean addAll(int index, Collection<? extends T> c) {
        boolean added = false;
        for (T t : c)
            if (!super.contains(t)) {
                super.add(index++, t);
                added = true;
            }
        return added;
    }
}

Java tag