java中是否存在接受键值对并允许重复的本机数据结构?我正在创建一个字符串中的字符清单,但有些字符出现不止一次。
离
j -> false
a -> false
v -> false
a -> false
答案 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 question或another 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));
}
}
}