2010-06-10 3 views
3

Кто-нибудь знает реализацию таблицы двойной записи в Java, которую я могу скачать?Таблица двойной записи Java

мне нужно сделать что-то вроде этого

1 2 3 
    _______ 
a| x y z 

b| h l m 

c| o a k 

table.get(a,1) вернется x

Конечно, он должен использовать любой объект в качестве ключа, значения и т.д.

+0

aw! Пожалуйста, проверьте проект Guava позже осенью для наших классов Table, которые, я считаю, сделают вас очень счастливыми. http://guava-libraries.googlecode.com –

ответ

3

Есть два основных подхода, в зависимости от ваших потребностей.

Один должен сделать Hashtable (или аналогичный) Hashtable s.

Hashtable<Integer, Hashtable<String, String>> = ...; 

Другой подход заключается в создании свой собственный тип данных, который представляет собой (Integer, String) пару, так что вы можете сделать:

Hashtable<YourFancyDatatype, String> 
+0

+1 dang, избили меня – Jacob

+2

Я бы указал, что если вы используете __YourFancyDataType__, вам придется обеспечить последовательную реализацию методов __hashCode__ и __equals__. – Jack

+0

В хэш-таблице Java есть Hashtable, а не HashTable. –

0

Я предполагаю, что у вас есть массив символов/объектов и количество и желание пересекать друг друга в вашем столе. Вы можете сопоставить каждый символ с числом от 0 .. qtyOfCharacters и просто создать двумерный массив Object [] [] table = new Object [A] [B], где A - количество символов/объекта, только что отображаемых, а B - количество столбцов.

Чтобы отобразить символы/объекты на номера, вы должны использовать HashMap/HashTable.

Идея заключается в том, что если доступ к элементу в «а, 3» вы должны написать таблицу [charmap.get («а»)] [3]

1

Ответ на ваш вопрос частично лежит в предыдущей вопросы по СО: Java generics Pair<String, String> stored in HashMap not retrieving key->value properly

import java.lang.*; 
import java.util.*; 

public class Pair<TYPEA, TYPEB> implements Comparable< Pair<TYPEA, TYPEB> > { 
    protected final TYPEA Key_; 
    protected final TYPEB Value_; 

    public Pair(TYPEA key, TYPEB value) { 
    Key_ = key; 
    Value_ = value; 
    } 
    public TYPEA getKey() { 
    return Key_; 
    } 
    public TYPEB getValue() { 
    return Value_; 
    } 
    public String toString() { 
    System.out.println("in toString()"); 
    StringBuffer buff = new StringBuffer(); 
    buff.append("Key: "); 
    buff.append(Key_); 
    buff.append("\tValue: "); 
    buff.append(Value_); 
    return(buff.toString()); 
    } 
    public int compareTo(Pair<TYPEA, TYPEB> p1) { 
    System.out.println("in compareTo()"); 
    if (null != p1) { 
     if (p1.equals(this)) { 
      return 0; 
     } else if (p1.hashCode() > this.hashCode()) { 
      return 1; 
     } else if (p1.hashCode() < this.hashCode()) { 
      return -1; 
     } 
    } 
    return(-1); 
    } 

    public int hashCode() { 
    int hashCode = Key_.hashCode() + (31 * Value_.hashCode()); 
    System.out.println("in hashCode() [" + Integer.toString(hashCode) + "]"); 
    return(hashCode); 
    } 

    @Override 
    public boolean equals(Object o) { 
     System.out.println("in equals()"); 
     if (o instanceof Pair) { 
     Pair<?, ?> p1 = (Pair<?, ?>) o; 
     if (p1.Key_.equals(this.Key_) && p1.Value_.equals(this.Value_)) { 
      return(true); 
     } 
     } 
     return(false); 
    } 

    public static void main(String [] args) { 
    HashMap< Pair<String, int>, String> table = new HashMap<Pair<String,int>, String>(); 
    table.put(new Pair<String, int>("a", 1), "x"); 
    table.put(new Pair<String, int>("a", 2), "y"); 
    table.put(new Pair<String, int>("a", 3), "z"); 
    table.put(new Pair<String, int>("b", 1), "h"); 
    table.put(new Pair<String, int>("b", 2), "l"); 
    table.put(new Pair<String, int>("b", 3), "m"); 
    table.put(new Pair<String, int>("c", 1), "o"); 
    table.put(new Pair<String, int>("c", 2), "a"); 
    table.put(new Pair<String, int>("c", 3), "k"); 

    String val = table.get(new Pair<String, int>("a", 1)); //val is x for this input pair 
    } 
} 
Смежные вопросы