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;
}
}