重复的键值对

时间:2014-02-05 19:29:57

标签: java data-structures

java中是否存在接受键值对并允许重复的本机数据结构?我正在创建一个字符串中的字符清单,但有些字符出现不止一次。

j -> false
a -> false
v -> false
a -> false

5 个答案:

答案 0 :(得分:4)

您可以通过在地图中保存每个键值的列表来模拟多个键值(KV)对。这是“多值”地图的标准实施方法。

因此,如果密钥是Character对象且值为Boolean,则可以执行

Map<Character, List<Boolean>> multimap = new HashMap<Character, List<Boolean>>();

每次要在地图中为现有KV对添加新值时,只需调用

multimap.get(key).add(value);

其中key是字符,value是其对应的Boolean值。

Guava Google库(免费下载)有Multimap interface以各种方式实现,因此基本上您可以实例化MultiMap<Character, Boolean>地图并相应地使用它。同样,您可以获取Apache Commons Collections库并使用其MultiValueMap类。您可能还想查看similar StackOverflow questionanother one的答案。

如果您只想存储每个键的每个值中的一个,那么Set应该使用List

答案 1 :(得分:3)

使用List的{​​{1}}:

Pair

使用自写通用public class Pair<T, U> { public final T key; public final U value; public Pair(T key, U value) { this.key = key; this.value = value; } } public class YourApp { public static void main(String[] args) { List<Pair<Character, Boolean>> charList = new ArrayList<Pair<Character, Boolean>>(); charList.add(new Pair('j', false)); charList.add(new Pair('a', false)); charList.add(new Pair('v', false)); charList.add(new Pair('a', false)); for (Pair<Character, Boolean> pair : charList) { System.out.println(pair.key + " -> " + pair.value); } } } 类,您可以保存键和所需类型的值。如果您要将对添加到Pair,您甚至可以保留配对条目的副本。

答案 2 :(得分:3)

您可以使用MultiMap<Character,Boolean> bcoz它允许org.apache.commons.collections包中存在的重复密钥。

您可以使用ArrayList并将包含属性的Class对象添加为char&amp;布尔对。

答案 3 :(得分:2)

我不知道解决方案的构建。

一个快速的选择是使用一个简单的ArrayList,并创建一个可以添加到它的char / boolean对象。

答案 4 :(得分:1)

commons.apache.org有MultiHashMap类。试试这个...... !!!

MultiHashMap mp = new MultiHashMap();
mp.put("a", "1");
mp.put("b", "4");
mp.put("c", "2");
mp.put("a", "6");
List list = null;
Set set = mp.entrySet();
Iterator i = set.iterator();
while (i.hasNext()) {
        Map.Entry<String, List<String>> me = (Map.Entry) i.next();
        for(int j = 0 ; j< me.getValue().size(); j++ ){
        System.out.println(me.getKey() +" : " +me.getValue().get(j));
        }
    }
}