将List <object []>转换为HashMap <integer,list <string>&gt;什么是最佳方式?</integer,list <string> </object []>

时间:2013-12-05 19:17:01

标签: java performance list hashmap time-complexity

我有List<Object[]>说li和

这样的项目
li.add(new Object[]{1,"Orange"}) 
li.add(new Object[]{1,"Apple"}) 
li.add(new Object[]{1,"Orange"}) 
li.add(new Object[]{2,"Guava"}) 
li.add(new Object[]{3,"Apple"}) 
li.add(new Object[]{3,"Grapes"}) 

即。一个整数可以多次。现在我必须将此List转换为HashMap HashMap<Integer,List<String>> 什么是最佳方式?

4 个答案:

答案 0 :(得分:3)

以下是一系列可帮助您实现目标的步骤。

  1. 迭代名单。
  2. 对于每个元素,检查地图中是否已存在Object[0] 一个。如果存在,则获取该密钥的List<String>并将Object[1]添加到其中 湾如果没有,则创建一个新的List<String>,向其中添加Object[1]并在地图中添加一个条目,其中Object[0]为关键,新创建的列表为Object[1]作为价值添加到它。
  3. 继续这一直到列表的末尾。
  4. 注意:您需要在必要时将Object[0]转换为IntegerObject[1]作为String

答案 1 :(得分:1)

如果要避免地图用户HashSet中的值列表中的重复值代替List

使用HashSet

HashMap<Integer, HashSet<String>> map =new HashMap<Integer, HashSet<String>>();
for (Object[] objects : lst) {
HashSet<String> valueSet;
if(map.containsKey((Integer)objects[0])){
valueSet = map.get((Integer)objects[0]);
}
else{
   valueSet = new HashSet<String>();
   map.put((Integer)objects[0],valueSet);
}
valueSet.add((String)objects[1]);
}
System.out.println(map);

使用列表

HashMap<Integer, List<String>> map =new HashMap<Integer, List<String>>();
for (Object[] objects : lst) {
List<String> valueList;
if(map.containsKey((Integer)objects[0])){
valueList = map.get((Integer)objects[0]);
}
else{
valueList = new ArrayList<String>();
map.put((Integer)objects[0],valueList);
}
valueList.add((String)objects[1]);
}
System.out.println(map);

答案 2 :(得分:0)

我会使用性能更好的SparseArray<ArrayList<String>>。 实际上你的IDE(eclipse会)会建议你把你的HashMap<Integer,List<String>>更改为SparseArray

     SparseArray<ArrayList<String>> list;

      for (Object[] objects : yourlist) {

            Integer number=((Integer) objects[0]);
            String value=((String) objects[1]);
            if (list.get(number) == null) {
                 ArrayList<String> temp= new  ArrayList<String>(); 
                 temp.put(value);
                 list.append(number, temp);
            }
            else list.get(number).put(value);

       }

答案 3 :(得分:0)

尝试,

    Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();

    for (Object[] objects : li) {
        if (map.containsKey(objects[0])) {
            List<String> list = map.get(objects[0]);
            list.add((String) objects[1]);
            map.put((Integer) objects[0], list);
        } else {
            List<String> list = new ArrayList<>();
            list.add((String) objects[1]);
            map.put((Integer) objects[0], list);
        }
    }
    System.out.println(map);