2016-10-04 6 views
0

У меня есть хэш-карта, которая использует линейное зондирование для решения конфликтов. Я хотел бы пройти его. Понятно, что это довольно просто, однако использование дженериков отталкивает меня.Traversing Hash Map linear using generics (Java)

Записи в внутреннем массиве хэш-карты имеют свои пары ключ-значение в качестве дженериков - как это

public entry(K key, V value) { 
     this.key = key; 
     this.value = value; 
    } 

Эти записи хранятся в массиве ввода - как этот

private entry[] entries; 

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

public V traverse(K k) { 

    //look from current key 
    for(int i = (int)k; i < entries.length; i++){ 
     //visit node 
    } 
    //go back to start, and look up to key 
    for(int i = 0; i < (int)k; i++){ 
     //visit node 
    } 
} 

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

+0

Ну, вам сначала нужно его найти ... Переверните «записи», пока не найдете тот, у которого есть .key == k', а затем используйте свой код. – Bakuriu

ответ

0

Если я понял, что вы, возможно, можете создать LinkedHashMap (HashMap)(), и с ним вы можете сделать это поперечно.

0

HashMap не сохраняет записи в ожидаемом порядке. Заказ основан на хэше ключа и организован как массив связанных списков.

Если вы хотите иметь определенный заказ, вы должны использовать TreeMap, который использует естественный порядок ключа. Если вам нужна специальная сортировка, вы можете предоставить конструктор Comparator по конструктору. Затем просто перейдите на map.keySet.

Но я думаю, что вам нужно (начиная итерацию где-то посередине) не поддерживается. Вы начинаете выполнять итерацию в первом узле и ничего не делаете, пока не достигнете нужного ключа, а затем выполните свою работу с остальными элементами, а затем снова начните повторять, пока не дойдете до нужного вам ключа.