Сбой индексации после назначения объекта Hashtable тому же объекту Enumeration - PullRequest
0 голосов
/ 19 октября 2018

У меня есть следующий фрагмент кода в моем устаревшем коде.Здесь он выполняет итерацию двух хеш-таблиц с использованием перечисления.

Hashtable h4 = new Hashtable();
Hashtable h5 = new Hashtable();

for (int i=0 ; i < 3; i++) {
    h4.put (i, "" + i);
    //System.out.println(h4.get(i));
}

for (int i=0 ; i < 3; i++) {
    h5.put (i, "++"+i);
    //System.out.println(h5.get(i));
}

Enumeration e = h4.keys();
while (e.hasMoreElements ()) {
    System.out.println(e.nextElement());
}

e = h5.keys ();
while (e.hasMoreElements()) {
    System.out.println(e.nextElement());
}

Идеальное ожидание выглядит следующим образом:

0
1
2
++ 0
++ 1
++ 2

Однако приведенный выше код выведите в виде;

2
1
0
2
1
0

Проблема, я могу видеть здесь, состоит в том, что перечисление не сбрасывается, когда дело доходит до цикла второй Hashtable.Я хотел бы получить причину такого поведения.Да, конечно, в последней версии Java есть более эффективные способы зацикливания.

1 Ответ

0 голосов
/ 19 октября 2018

вы печатаете только ключи хеш-таблицы, а не значения

    Hashtable h4 = new Hashtable();
    Hashtable h5 = new Hashtable();

    for (int i=0 ; i < 3; i++) {
        h4.put (i, "" + i);
        //System.out.println(h4.get(i));
    }

    for (int i=0 ; i < 3; i++) {
        h5.put (i, "++"+i);
        //System.out.println(h5.get(i));
    }

    // java8 functionality
    //h4.values().stream().forEach(System.out::println);
    //h5.values().stream().forEach(System.out::println);

    //if legacy one iterator
    Iterator enum1 = h4.values().iterator();
    while(enum1.hasNext()) {
        System.out.println(enum1.next());
    }
    enum1 = h5.values().iterator();
    while(enum1.hasNext()) {
        System.out.println(enum1.next());
    }
...