Java 允许复制密钥并保持插入顺序的映射
目前我正在使用LinkedHashMap来维护插入顺序 我使用的LinkedHashMap的语法:Java 允许复制密钥并保持插入顺序的映射,java,Java,目前我正在使用LinkedHashMap来维护插入顺序 我使用的LinkedHashMap的语法: private LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>(); linkedHashMap.put("R1", "Data1"); linkedHashMap.put("R2", "Data2"); linkedHashMap.put("R3", "D
private LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("R1", "Data1");
linkedHashMap.put("R2", "Data2");
linkedHashMap.put("R3", "Data3");
linkedHashMap.put("R4", "Data4");
private LinkedHashMap LinkedHashMap=new LinkedHashMap();
linkedHashMap.put(“R1”、“Data1”);
linkedHashMap.put(“R2”、“数据2”);
linkedHashMap.put(“R3”、“Data3”);
linkedHashMap.put(“R4”、“Data4”);
这很好用。但我有我必须使用重复密钥的地方,我也有维护插入数据的地方
例如:
private LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("R1", "Data1");
linkedHashMap.put("R2", "Data2");
linkedHashMap.put("R1", "Data3");
linkedHashMap.put("R2", "Data4");
private LinkedHashMap LinkedHashMap=new LinkedHashMap();
linkedHashMap.put(“R1”、“Data1”);
linkedHashMap.put(“R2”、“数据2”);
linkedHashMap.put(“R1”、“Data3”);
linkedHashMap.put(“R2”、“数据4”);
当我试图在linkedHaphMap中保留重复数据时,它会删除重复数据并只保留一个数据
那么,如何在java中插入重复数据并保持插入顺序呢?实现我的案例的方法是什么?试试这个:
public class Test {
public static void main(String[] args) {
Map<String, List<String>> map = new LinkedHashMap<>();
put(map, "R1", "Data1");
put(map, "R2", "Data2");
put(map, "R1", "Data3");
put(map, "R2", "Data4");
System.out.println(map); // prints {R1=[Data1, Data3], R2=[Data2, Data4]}
}
public static void put(Map<String, List<String>> map, String key, String value) {
if (map.get(key) == null) {
List<String> list = new ArrayList<>();
list.add(value);
map.put(key, list);
} else {
map.get(key).add(value);
}
}
}
公共类测试{
公共静态void main(字符串[]args){
Map Map=newlinkedhashmap();
放置(地图,“R1”、“数据1”);
放置(地图、“R2”、“数据2”);
放置(地图、R1、数据3);
放置(地图、“R2”、“数据4”);
System.out.println(map);//打印{R1=[Data1,Data3],R2=[Data2,Data4]}
}
公共静态void put(映射映射、字符串键、字符串值){
if(map.get(key)==null){
列表=新的ArrayList();
列表。添加(值);
地图。放置(键、列表);
}否则{
map.get(key)、add(value);
}
}
}
对数据使用复合模式。简单的例子可能是这样的
public class Container{
String value;
ArrayList<String> list = null;
public Container(String value){
this.value = value;
}
public void add(String newvalue){
if (list == null){
list = new ArrayList();
list.add(value);
list.add(newvalue);
}else{
list.add(newvalue);
}
}
public boolean isSingleValue(){
return list==null;
}
public Iterator<String> getOrderedList(){
return list.iterator();
}
public String getValue(){
return value;
}
private LinkedHashMap LinkedHashMap=new LinkedHashMap();
卖出(“R1”、“数据1”);
出售(“R2”、“数据2”);
卖出(“R1”、“数据3”);
卖出(“R2”、“数据4”);
私有void put(字符串键、字符串值){
if(linkedHashMap.get(key)==null){
put(key,newarraylist());
}
linkedHashMap.get(key).add(value);
}
专用布尔值isDuplicate(字符串键){
return(linkedHashMap.get(key.size()>1)
}
你应该看看:linkedHashMap.get(“R2”)
会给你什么?当有两个带有该键的条目,并且只有一个时?地图不是为同一个键的多个副本设计的,您应该设计自己的类或使用列表请查看下面的帖子。插入顺序是什么意思?插入的修改值是否为最新值?
if (map.containsKey(key)){
map.get(key).add(value);
}else{
map.put(key,new Container(value))
}
private LinkedHashMap<String, List<String>> linkedHashMap = new LinkedHashMap<String, List<String>>();
put("R1", "Data1");
put("R2", "Data2");
put("R1", "Data3");
put("R2", "Data4");
private void put(String key, String value){
if(linkedHashMap.get(key) == null){
linkedHashMap.put(key, new ArrayList<String>());
}
linkedHashMap.get(key).add(value);
}
private boolean isDuplicate(String key){
return (linkedHashMap.get(key).size()>1)
}