Объявление. 1. Я предполагаю, что вы хотите обратный поиск BiMap
(BitMap не существует в Гуаве)? Да, это возможно, вы просто позвоните по номеру inverse
на свой номер BiMap<K, V>
, и вы получите обратно BiMap<V, K>
view вашего бимара.
Пример (взят из тестового набора гуавы в):
public void testMapConstructor() {
/* Test with non-empty Map. */
Map<String, String> map = ImmutableMap.of(
"canada", "dollar",
"chile", "peso",
"switzerland", "franc");
HashBiMap<String, String> bimap = HashBiMap.create(map);
assertEquals("dollar", bimap.get("canada"));
assertEquals("canada", bimap.inverse().get("dollar"));
}
объявления. 2. Предполагая, что вы имеете в виду «Я хочу сохранить, ключ -> несколько [Коллекция] значения» (Map<K, Collection<V>>
), ListMultimap
, вероятно, что вы хотите, более ArrayListMultimap
(высокоточного пресервы значений порядка) или LinkedListMultimap
(сохраняет оба ключа и значения заказ). Если ваш объект будет неизменным, я настоятельно советую вам использовать ImmutableListMultimap
.
Вы также можете создать свою собственную реализацию Multimap
с помощью factory (бит многословным), то есть я использую:
private static <K, V> ListMultimap<K, V> makeLinkedArrayListMultimap() {
return Multimaps.newListMultimap(Maps.<K, Collection<V>>newLinkedHashMap(),
new Supplier<List<V>>() {
@Override public List<V> get() {
return Lists.newArrayList();
}
});
}
public static void main(final String[] args) {
final ListMultimap<String, String> multimap = makeLinkedArrayListMultimap();
multimap.putAll("one", ImmutableList.of("zero", "three"));
multimap.putAll("two", ImmutableList.of("three", "four", "three"));
multimap.putAll("three", ImmutableList.<String>of()); // note that this doesn't add key to multimap
multimap.put("four", "forty-two");
System.out.println(multimap);
// prints {one=[one, three], two=[three, four, three], four=[forty-two]}
final List<String> listForOnes = multimap.get("one");
System.out.println(listForOnes.get(0));
// prints zero
}
P.S. Взгляните на Guava's wiki, что объясняет как BiMap, так и Multimaps.
На самом деле я хочу решить эту проблему http://stackoverflow.com/questions/9661374/java-hash-table-issue-with-object-refference. Поэтому я считаю, что заменить все «foo» на один «foo», а затем обратный поиск (для Key-Multiple Value Map) или получить ключ от позиции, который сэкономит место (для карты с множественным значением ключа). Однако, кажется, я должен был потратить много места, чем раньше. Есть ли решение Guava этого http://stackoverflow.com/questions/9661374/java-hash-table-issue-with-object-refference. Благодарю. – Arpssss
Это сильно напоминает преждевременную оптимизацию, которую вы пытаетесь сделать. –