2016-04-22 4 views
0

У меня проблема с методом DualHashBidiMap и getKey.Метод DualHashBidiMap и getKey

Я использую Commons Коллекции 4,1

ContainsKey метод возвращает истину для конкретного ключа insterted, но GETKEY метод возвращает нуль для того же ключа;

Key класс имеет суперкласс с равен и хэшем метода перекрытым, чтобы соответствовать по ид собственности.


Главный класс

public class Main { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    DualHashBidiMap<Observed, Object> map=new DualHashBidiMap<Observed,Object>(); 

    Task t66=new Task(); 
    t66.setId(66); 
    map.put(t66, "Task66"); 

    Task tFetch=new Task(); 
    tFetch.setId(66); 
    System.out.println("tFetch present:"+map.containsKey(tFetch)); 
    System.out.println("tFetch Object:"+map.getKey(tFetch)); 
    } 
} 

это выход

tFetch present:true 
tFetch Object:null 

Key Класс

public class Task extends Observed{ 

public void m1(){ 
    System.out.println("Method called !!"); 
    } 
} 

Ключевые SuperClass

public class Observed extends Observable{ 
private Integer id; 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

@Override 
public boolean equals(Object obj) { 
    boolean retValue=false; 
    Observed t=(Observed) obj; 
    if(t.getId().equals(this.getId())) retValue=true; 
    return retValue; 
} 

@Override 
public int hashCode() { 
    int hash = 3; 
    hash = 53 * hash + (this.getId() != null ? this.getId().hashCode() : 0); 
    hash = 53 * hash + this.getId(); 
    return hash; 
    } 
} 

Tnks всем ..

ответ

0

Вы пытаетесь получить ключ для значения, которое не существует на карте. Может быть, вы хотите сделать, как показано ниже

public class Main { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    DualHashBidiMap<Observed, Object> map=new DualHashBidiMap<Observed,Object>(); 

    Task t66=new Task(); 
    t66.setId(66); 
    map.put(t66, "Task66"); 

    Task tFetch=new Task(); 
    tFetch.setId(66); 
    System.out.println("tFetch present:"+map.containsKey(tFetch)); 
    // to get the key related to an object 
    System.out.println("tFetch Object:"+map.getKey("Task66")); 
    // to get a value related to a key 
    System.out.println("tFetch Object:"+map.get(tFetch)); 
    } 
} 
+0

Хорошо, теперь я понял. Я думал, что метод getKey возвращает ключевой объект по значению ключа. Извините за ошибку и спасибо за объяснение. – Max

+0

Если это ответит на ваш вопрос, отметьте его как ответ, чтобы другие неотвеченные вопросы привлекли внимание – awsome