Нужна карта/таблица Java с несколькими ключами к одному значению. Значение обычно изменяется

Лучший способ действительно зависит от функции и аргументов. Каждая из Ваших опций является хорошей идеей в различных ситуациях. Я обычно пробую их в следующем порядке до одного из них работы:

  1. Используя дополнительные аргументы как y = y || 'значение по умолчанию'. Это удобно, если бы можно сделать это, но это не может всегда работать практически, например, когда 0/null/undefined был бы допустимым аргументом.

  2. Используя количество аргументов. Подобный последней опции, но может работать, когда № 1 не работает.

  3. типы Проверки аргументов. Это может работать в некоторых случаях, где количество аргументов является тем же. Если Вы не можете надежно определить типы, Вы, возможно, должны использовать различные имена.

  4. Используя различные имена во-первых. Вы, возможно, должны сделать это, если другие опции не будут работать, не практичны, или для непротиворечивости с другими связанными функциями.

11
задан Duncan 6 August 2009 в 08:42
поделиться

4 ответа

Любая реализация java.util.Map сделает это - нет ограничений на то, сколько раз конкретное значение могут быть добавлены в виде отдельных ключей:

Map<String,Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
m.put("World", 5);
System.out.println(m); // { Hello->5, World->5 }  

Если вам нужна карта, где один ключ связан с несколькими значениями, это называется мульти-карта , и вы можете получить ее из google java API коллекций или из общих-коллекций Apache

19
ответ дан 3 December 2019 в 02:52
поделиться

Гм…

Map map = new HashMap();
Object someValue = new Object();
map.put(new Object(), someValue);
map.put(new Object(), someValue);

Теперь карта содержит одно и то же значение дважды, доступное через разные ключи. Если это не то, что вы ищете, вам следует переработать свой вопрос. :)

5
ответ дан 3 December 2019 в 02:52
поделиться

this может делайте то, что хотите:

import java.util.*;
class Value {
    public String toString() {
        return x.toString();
    }
    Integer x=0;
}
public class Main {
    public static void main(String[] arguments) {
        Map m=new HashMap();
        final Value v=new Value();
        m.put(1,v);
        m.put(2,v);
        System.out.println(m.get(1));
        System.out.println(m.get(2));
        v.x=42;
        System.out.println(m.get(1));
        System.out.println(m.get(2));
    }
3
ответ дан 3 December 2019 в 02:52
поделиться

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

    "Hello"    ------|
                     |----> firstObject
       3       ------|

    "Monkey"   ------|
                     |----> secondObject
       72      ------|

       14      -----------> thirdObject

   "Baseball"  ------|
                     |----> fourthObject
       18      ------|

Очевидно, что наличие двух карт, одна для целочисленных ключей и одна для ключей String, не сработает, поскольку обновление одной карты не отразится на другой карте. Предположим, вы изменили Map , обновив «Monkey» для сопоставления с FridayObject. Результатом этой модификации является изменение Entry на этой карте, но это, конечно, не влияет на другую карту. Итак, в то время как то, что вы намеревались сделать, было:

    "Monkey"   ------|
                     |----> fifthObject
       72      ------|

в действительности вы бы получили следующее:

    "Monkey"   -----------> fifthObject

       72      -----------> secondObject

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

    "Monkey"   -------> fifthObjectArray ------|
                                               |-----> fifthObjectArray[0]
       72      -------> fifthObjectArray ------|
3
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: