nd.*_*nd. 86
您正在搜索多图,事实上,两个公共集合和Guava都有多个实现.Multimaps通过维护每个键的值集合来允许多个键,即您可以将单个对象放入映射中,但是您可以检索集合.
如果你可以使用Java 5,我宁愿选择Guava,Multimap因为它是泛型的.
use*_*943 32
我们不需要依赖Google Collections外部库.您可以简单地实现以下Map:
Map<String, ArrayList<String>> hashMap = new HashMap<String, ArrayList>();
public static void main(String... arg) {
// Add data with duplicate keys
addValues("A", "a1");
addValues("A", "a2");
addValues("B", "b");
// View data.
Iterator it = hashMap.keySet().iterator();
ArrayList tempList = null;
while (it.hasNext()) {
String key = it.next().toString();
tempList = hashMap.get(key);
if (tempList != null) {
for (String value: tempList) {
System.out.println("Key : "+key+ " , Value : "+value);
}
}
}
}
private void addValues(String key, String value) {
ArrayList tempList = null;
if (hashMap.containsKey(key)) {
tempList = hashMap.get(key);
if(tempList == null)
tempList = new ArrayList();
tempList.add(value);
} else {
tempList = new ArrayList();
tempList.add(value);
}
hashMap.put(key,tempList);
}
Run Code Online (Sandbox Code Playgroud)
请确保微调代码.
Iss*_*aji 25
Multimap<Integer, String> multimap = ArrayListMultimap.create();
multimap.put(1, "A");
multimap.put(1, "B");
multimap.put(1, "C");
multimap.put(1, "A");
multimap.put(2, "A");
multimap.put(2, "B");
multimap.put(2, "C");
multimap.put(3, "A");
System.out.println(multimap.get(1));
System.out.println(multimap.get(2));
System.out.println(multimap.get(3));
Run Code Online (Sandbox Code Playgroud)
输出是:
[A,B,C,A]
[A,B,C]
[A]
Run Code Online (Sandbox Code Playgroud)
注意:我们需要导入库文件.
http://www.java2s.com/Code/Jar/g/Downloadgooglecollectionsjar.htm
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
Run Code Online (Sandbox Code Playgroud)
或https://commons.apache.org/proper/commons-collections/download_collections.cgi
import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.map.MultiValueMap;
Run Code Online (Sandbox Code Playgroud)
Mne*_*nth 10
如果你想迭代一个键值对列表(正如你在注释中写的那样),那么List或数组应该更好.首先结合您的键和值:
public class Pair
{
public Class1 key;
public Class2 value;
public Pair(Class1 key, Class2 value)
{
this.key = key;
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
将Class1和Class2替换为要用于键和值的类型.
现在您可以将它们放入数组或列表中并迭代它们:
Pair[] pairs = new Pair[10];
...
for (Pair pair : pairs)
{
...
}
Run Code Online (Sandbox Code Playgroud)
可以使用映射条目列表来解决此问题List<Map.Entry<K,V>>.我们既不需要使用外部库也不需要使用Map的新实现.可以像这样创建一个映射条目:
Map.Entry<String, Integer> entry = new AbstractMap.SimpleEntry<String, Integer>("key", 1);
| 归档时间: |
|
| 查看次数: |
220260 次 |
| 最近记录: |