Add pour treeset
Résolu
hasnaa-1
Messages postés
11
Statut
Membre
-
hasnaa-1 Messages postés 11 Statut Membre -
hasnaa-1 Messages postés 11 Statut Membre -
Bonjour a tous
lorsqu'on utilise add pour un treeset et on a deux éléments qui sont considérés égaux alors qu il est l élément qui va être supprime est ce que ca sera l ancien au bien le nouveau élément ajoute
merci d'avance pour vos réponses
lorsqu'on utilise add pour un treeset et on a deux éléments qui sont considérés égaux alors qu il est l élément qui va être supprime est ce que ca sera l ancien au bien le nouveau élément ajoute
merci d'avance pour vos réponses
1 réponse
-
Question intéressante, la réponse est dans la documentation :
https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#add(E)
"Adds the specified element to this set if it is not already present. More formally, adds the specified element e to this set if the set contains no element e2 such that (e==null ? e2==null : e.equals(e2)). If this set already contains the element, the call leaves the set unchanged and returns false."-
-
Effectivement c'est possible, il suffit que le Comparator ne renvoie jamais 0, même en cas d'égalité. Ce n'est plus plus vraiment un arbre dans ce cas, mais ça se fait.
Exemple :
import java.util.Comparator; import java.util.TreeSet; public class TreeSetMultiple<E extends Comparable<E>> extends TreeSet<E> { private static final long serialVersionUID = 1; public TreeSetMultiple() { super(new Comparator<E>() { @Override public int compare(E e1, E e2) { int n = e1.compareTo(e2); if (n==0) return 1; else return n; } }); } } public class Test { public static void main(String[] args) { TreeSetMultiple<Integer> tree = new TreeSetMultiple<Integer>(); tree.add(1); tree.add(2); tree.add(3); tree.add(4); tree.add(2); tree.add(3); System.out.println(tree); // [1, 2, 2, 3, 3, 4] } } -
-
Au temps pour moi, j'avais mal compris, mais dans ce cas c'est encore plus simple, pas besoin de Comparator, il suffit de modifier la méthode add pour supprimer d'abord l'élément avant de l'ajouter.
import java.util.TreeSet; public class TreeSetMultiple<E> extends TreeSet<E> { private static final long serialVersionUID = 1; @Override public boolean add(E e) { this.remove(e); return super.add(e); } }
Le plus dur en fait c'est l'exemple, pour être sûr que c'est bien le nouveau qui est ajouté :
public class Test<E extends Comparable<E>> implements Comparable<Test<E>> { private static int n=0; private int id = ++n; private E e; public Test(E e) { this.e = e; } public String toString() { return String.format("{id=%d, %s}",id,e.toString()); } @Override public int compareTo(Test<E> t) { return e.compareTo(t.e); } public static void main(String[] args) { TreeSetMultiple<Test<Integer>> tree = new TreeSetMultiple<Test<Integer>>(); tree.add(new Test<Integer>(1)); System.out.println(tree); // [{id=1, 1}] tree.add(new Test<Integer>(2)); System.out.println(tree); // [{id=1, 1}, {id=2, 2}] tree.add(new Test<Integer>(1)); System.out.println(tree); // [{id=3, 1}, {id=2, 2}] tree.add(new Test<Integer>(3)); System.out.println(tree); // [{id=3, 1}, {id=2, 2}, {id=4, 3}] tree.add(new Test<Integer>(2)); System.out.println(tree); // [{id=3, 1}, {id=5, 2}, {id=4, 3}] tree.add(new Test<Integer>(4)); System.out.println(tree); // [{id=3, 1}, {id=5, 2}, {id=4, 3}, {id=6, 4}] } } -
-