Я пишу программу java с использованием HashTable, и мне трудно использовать ее. У меня есть хэш-таблицу объекта, между инициализацией и чтения, объекты изменения значенийhashtable, который меняет значение самостоятельно
Так как кусок кода является более понятным, чем большой пункт, здесь:
class localDictionnary {
private Map<Entries, Symbol> dictionnary;
public LocalDictionnary() {
this.dictionnary = new Hashtable<Entre, Symbole>();
}
public void add(Entries e, Symbol s) {
dictionnary.put(e, s);
}
public void check() {
int displacement = 0;
for(Entry<Entries, Symbol> e : this.dictionnary.entrySet()){
e.getValue().setDisplacement(displacement);
displacement += e.getValue().getSize();
System.out.print(e.getValue().getDisplacement() + " ");
}
System.out.println("");
for(Entry<Entries, Symbol> e : this.dictionnary.entrySet())
System.out.print(e.getValue().getDisplacement() + " ");
}
}
натянутых программы:
0 4 8 12 16 20 24 28 32 36
8 8 32 16 36 28 28 32 36 0
величина смещения не совпадают между первым и вторым вызовом Println, где он, очевидно, следует, даже если порядок изменился
Проблема не из-за того, как HashTable сортирует элементы, а программа полностью последовательна, поэтому нет другой нити, которая ударит каждую вещь вниз ...
Я не являюсь этой новой программой написания java, но должен сказать, , это первый раз, когда я использую Hashtables ...
Большое спасибо за вашу помощь = P
PS: Я не родной английский, так что простите меня за мои ошибки
Edit:
вот кусок кода, который добавит <key, value>
в HashMap, это код Java-чашка:
DECL_CHAMP ::= STATUS:s TYPE:t ID:id
{:
SymbolTable.add(new Entries(id), new Symbol(s, t));
:}
;
STATUS ::= PUBLIC
{:
RESULT = Symbole.Statue.PUBLIC;
:}
| PRIVATE
{:
RESULT = Symbole.Statue.PRIVATE;
:}
;
TYPE ::= INTEGER
{:
RESULT = Symbole.Type.INTEGER;
:}
;
Edit: идентичность обоих печатных заявлений:
первая печать:
1271698539 1680090029
10643000 635758299
1458587468 635758299
953744171 1680090029
760340789 1519941073
1331632846 1826157335
390046421 1390107103
1055484408 1390107103
1311521036 1680090029
961899244 1826157335
второй печати:
1271698539 1680090029
10643000 635758299
1458587468 635758299
953744171 1680090029
760340789 1519941073
1331632846 1826157335
390046421 1390107103
1055484408 1390107103
1311521036 1680090029
961899244 1826157335
Прежде всего, не используйте «Hashtable», используйте «HashMap». Он не синхронизирован и работает быстрее. 'Hashtable' устарел. –
Следующий вопрос, возможно, у вас есть тот же символ «Символ», отображаемый более чем на «Записи»? –
Я впервые использовал HashMap, но была та же проблема, это был просто тест на использование HashTable – nicoptere