2015-01-28 16 views
3

Я следующие два класса, которые определяют объекты, я хотел бы поставить в TreeMap:Ошибка при вводе <Object, Object> в TreeMap

class GeneKey { 

    String PN; 
    int PW; 

    // Generator makes unique TreeMap key. 
    GeneKey(String a, int b){ 
     this.PN = a; 
     this.PW = b; 
    } 
} 

Затем второй объект:

class GeneValue { 

    String info; 
    String date; 

    // Generator makes TreeMap value 
    GeneValue(String a, String b){ 
     this.info = a; 
     this.date = b; 
    } 
} 

Я хотел бы затем сделать TreeMap:

import java.util.TreeMap; 

// In main ... 
TreeMap<GeneKey, GeneValue> samples = new TreeMap<GeneKey, GeneValue>(); 

String a = "test"; 
int b = 100; 

String c = "test again"; 
String d = "test yet again"; 

// Try to put these objects into the tree map. 
samples.put(new GeneKey(a, b) ,new GeneValue(c,d)) 

Но я получаю следующее сообщение об ошибке:

Я хотел бы знать, почему я не могу установить TreeMap с ключом: значение GeneKey: GeneValue, хотя я указал эти объекты при инициализации моего TreeMap. Как инициализировать карту для того, чтобы .put() эти два объекта.

Спасибо

+3

Внесите 'Comparable' в свой' GeneKey'? – Reimeus

+0

Это почти точно обман http://stackoverflow.com/questions/28178337/returning-a-sortedset/28178380#28178380. –

ответ

7

TreeMap является упорядоченным контейнером: когда вы запрашиваете свои ключи или его запись, вы получите их в определенном порядке.

Порядок заказа зависит от того, какой ключ вы предоставляете. Для того, чтобы контейнер заказать ключи, каждый ключ должен реализовать интерфейс Comparable:

class GeneKey implements Comparable<GeneKey> { 

    String PN; 
    int PW; 

    // Generator makes unique TreeMap key. 
    GeneKey(String a, int b){ 
     this.PN = a; 
     this.PW = b; 
    } 
    public int compareTo(GenKey other) { 
     int res = PN.compareTo(other.PN); 
     return (res != 0) ? res : Integer.compare(PW, other.PW); 
    } 
} 

Это не является обязательным требованием для хэш на основе контейнера, потому что все наследуется от Object, который поставляет hashCode и equals.

+0

Отлично. Спасибо. – Malonge

Смежные вопросы