目前我正在使用LinkedHashMap来维护广告订单。
我使用的LinkedHashMap的语法:
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<String, String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("R1", "Data1");
linkedHashMap.put("R2", "Data2");
linkedHashMap.put("R1", "Data3");
linkedHashMap.put("R2", "Data4");
当我试图在linkedHaphMap中保留重复数据时,它会删除重复数据并只保留一个数据。
那么如何在java中插入重复数据并维护插入顺序?实现我案子的方法是什么?
答案 0 :(得分:4)
试试这个:
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);
}
}
}
答案 1 :(得分:0)
为数据使用复合模式。简单的例子看起来像这样。
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;
}
这样,您的地图可以包含单个元素以及元素列表。您可以使用如下:
if (map.containsKey(key)){
map.get(key).add(value);
}else{
map.put(key,new Container(value))
}
答案 2 :(得分:0)
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)
}