2015-11-29 8 views
-3

Я проверял множество деревьев и обратите внимание, что я не могу изменить значение в дерево набор для определенного моего пользователя объектаTreeSet Update Value Object кажется ошибка в реализации

например

class Emp implements Comparable<Emp> 
{ 
int id; 
String name; 

public Emp(int id,String name) 
{ 
    this.id=id; 
    this.name=name; 
} 

@Override 
public int compareTo(Emp obj) { 
     if(obj.id>this.id) 
      return -1; 
     else if(obj.id<this.id) 
      return 1; 
     else 
      return 0; 
} 

@Override 
public String toString() { 
    return "Emp Id:"+id+" Emp Name:"+name; 
} 
} 
public static void main(String[] args) { 
    treesetwithCustom(); 
} 

public static void treesetwithCustom() 
{ 
    TreeSet<Emp> set=new TreeSet<Emp>(); 
    set.add(new Emp(1,"ABC")); 
    set.add(new Emp(2,"XYZ")); 
    set.add(new Emp(1,"PQR")); 
    System.out.println(set); 
} 

Когда Я печатаю набор, который показывает значение для Emp ID 1 как ABC, а не PQR

когда я проверяю rt.jar для реализации набора деревьев. Я замечаю, что в реализации реализована ошибка, поскольку TreeSet внутренне использует реализацию, предоставляемую TreeMap и вызвать метод put TreeMap.

В rt.jar код пут Обновить значение и не Key и TreeSet значение для ключа всегда передается как настоящее

Пожалуйста, помогите мне понять, если есть какой-либо способ достижения обновление в наборе деревьев и если мое понимание правильное в отношении ошибки.

+1

_Adds указанный элемент этого множества, если оно не уже есть. Что вы об этом думаете? –

+0

, когда я помещаю объект emp с тем же идентификатором с другим хэш-набором имени, сохраняйте старый объект, даже если значение для имени изменяется, как я могу обновить значение в TreeSet –

+0

Это ожидаемое поведение 'TreeSet' как цитата из javadoc из моего последнего комментария. –

ответ

0

Как уже объяснили другие, описанное поведение следует ожидать и явно указать в описании API JDK для класса TreeSet.

Если вы ищете способ обновить свою коллекцию, ознакомьтесь с моей реализацией UpdateableTreeSet. Есть несколько статей здесь на SO, которые относятся к одной и той же задачи, а также UpdateableTreeSet: