Add pour treeset

Résolu/Fermé
hasnaa-1 Messages postés 10 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 3 janvier 2014 - 15 juin 2013 à 20:33
hasnaa-1 Messages postés 10 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 3 janvier 2014 - 15 juin 2013 à 23:08
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

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
15 juin 2013 à 20:45
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."
1
hasnaa-1 Messages postés 10 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 3 janvier 2014
Modifié par hasnaa-1 le 15/06/2013 à 21:06
merci beaucoup pour votre réponse mais est ce qu il n'y a pas une manier pour garder le nouveau élément

par exemple est ce que je ne peux pas dans la méthode compareTo,
dans le cas ou les 2 éléments sont considérés égaux,de garder le dernier élément ajoute ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
15 juin 2013 à 21:18
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]
    }
}
0
hasnaa-1 Messages postés 10 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 3 janvier 2014
15 juin 2013 à 21:23
merci
mais je veux qu il remplace la derniere valeur ajouter par l ancienne
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
15 juin 2013 à 21:35
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}]
    }
}
0
hasnaa-1 Messages postés 10 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 3 janvier 2014
Modifié par hasnaa-1 le 15/06/2013 à 23:31
muchas gracias
0