При реализации структуры ip-lookup я пытался поддерживать набор ключей в структуре типа trie, которая позволяет мне искать «пол» ключа (то есть самый большой ключ, который меньше или равен данный ключ). Я решил использовать Apache Collections 4 PatriciaTrie, но, к сожалению, я обнаружил, что floorEntry и связанные с ним методы не являются public
. Мое текущее «грязное» решение вынуждают их с отражением (в Scala):Почему `floorEntry` и другие методы недоступны в PatriciaTrie?
val pt = new PatriciaTrie[String]()
val method = pt.getClass.getSuperclass.getDeclaredMethod("floorEntry", classOf[Object])
method.setAccessible(true)
// and then for retrieving the entry for floor(key)
val entry = method.invoke(pt, key).asInstanceOf[Entry[String, String]]
Есть ли чистый способ иметь такую же функциональность? Почему эти методы не являются общедоступными?
Если я правильно понимаю, 'trie.headMap (к) .lastKey();' не будет возвращать 'k' если он уже содержится на карте, так как документ для 'headMap' говорит, что он *" Возвращает представление части этой карты, ключи которой строго меньше, чем toKey "*. – ale64bit
@kaktusito Отредактировано! –