boo*_*eye 260 java hashtable hashmap
如果我通过相同的密钥多次HashMap的put方法,会发生什么原始值?如果价值重复怎么办?我没有找到任何关于此的文件.
案例1:密钥的覆盖值
Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
System.out.println(mymap.get("1"));
Run Code Online (Sandbox Code Playgroud)
我们得到了surely not one.
案例2:重复值
Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
// The following line was added:
mymap.put("1","one");
System.out.println(mymap.get("1"));
Run Code Online (Sandbox Code Playgroud)
我们得到了one.
但是其他价值观会发生什么?我正在向学生教授基础知识,我被问到这个问题.是Map一个桶,其中引用了最后一个值(但在内存中)?
jhe*_*ngs 296
根据定义,该put命令替换与映射中给定键相关联的先前值(概念上类似于基本类型的数组索引操作).
地图只是删除了对值的引用.如果没有其他任何东西持有对该对象的引用,该对象就有资格进行垃圾回收.此外,Java返回与给定键关联的任何先前值(null如果不存在),因此您可以确定存在的值并在必要时维护引用.
更多信息:HashMap Doc
Pas*_*ent 75
您可以在Map#put(K,V)的javadoc中找到答案(实际上返回了一些内容):
Run Code Online (Sandbox Code Playgroud)public V put(K key, V value)将指定的值与此映射中的指定键相关联(可选操作).如果映射先前包含此键的映射,则旧值将替换为指定的值.(当且仅当将返回时,地图
m被称为包含密钥的映射.)km.containsKey(k)true参数:
key- 与指定值关联的键.
value- 与指定键关联的值.返回:
与指定键关联的先前值,或者null如果没有映射key.(如果实现支持值,则null返回也可以指示先前null与指定关联的映射.)keynull
因此,如果您在调用时未分配返回的值mymap.put("1", "a string"),则它将变为未引用,因此有资格进行垃圾回收.
Bis*_*wal 21
它替换相应键的映射中的现有值。如果不存在具有相同名称的键,则它会创建一个具有提供值的键。例如:
Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","two");
Run Code Online (Sandbox Code Playgroud)
输出 键 =“1”,值 =“二”
因此,先前的值被覆盖。
kam*_*606 18
键的先前值将被删除并替换为新值.
如果您希望保留所有值,则可以考虑实现以下内容:
import org.apache.commons.collections.MultiHashMap;
import java.util.Set;
import java.util.Map;
import java.util.Iterator;
import java.util.List;
public class MultiMapExample {
public static void main(String[] args) {
MultiHashMap mp=new MultiHashMap();
mp.put("a", 10);
mp.put("a", 11);
mp.put("a", 12);
mp.put("b", 13);
mp.put("c", 14);
mp.put("e", 15);
List list = null;
Set set = mp.entrySet();
Iterator i = set.iterator();
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
list=(List)mp.get(me.getKey());
for(int j=0;j<list.size();j++)
{
System.out.println(me.getKey()+": value :"+list.get(j));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
jav*_*acm 17
它是键/值功能,您不能为多个值设置重复键,因为当您想
获得值为"1"时,如果您希望获得值为"1"的值时,其中一个值属于输入键的实际值它?!
这是为每个值都有唯一键的原因,但你可以通过java标准库得到一个技巧:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class DuplicateMap<K, V> {
private Map<K, ArrayList<V>> m = new HashMap<>();
public void put(K k, V v) {
if (m.containsKey(k)) {
m.get(k).add(v);
} else {
ArrayList<V> arr = new ArrayList<>();
arr.add(v);
m.put(k, arr);
}
}
public ArrayList<V> get(K k) {
return m.get(k);
}
public V get(K k, int index) {
return m.get(k).size()-1 < index ? null : m.get(k).get(index);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以用这种方式使用它:
public static void main(String[] args) {
DuplicateMap<String,String> dm=new DuplicateMap<>();
dm.put("1", "one");
dm.put("1", "not one");
dm.put("1", "surely not one");
System.out.println(dm.get("1"));
System.out.println(dm.get("1",1));
System.out.println(dm.get("1", 5));
}
Run Code Online (Sandbox Code Playgroud)
打印结果如下:
[one, not one, surely not one]
not one
null
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
417417 次 |
| 最近记录: |