在HashMap中将值从一个键移动到另一个键

时间:2013-10-31 12:34:53

标签: java arraylist hashmap

我有一个ArrayList,它包含学生对象,如下所示:

List<Students> stdList = new ArrayList<Students>();
stdList.add(new Students(1,"std1","address1"));
stdList.add(new Students(2,"std2","address2"));
stdList.add(new Students(3,"std3","address3"));
stdList.add(new Students(4,"std4","address4"));
stdList.add(new Students(5,"std5","address5"));
stdList.add(new Students(6,"std6","address6"));
stdList.add(new Students(7,"std7","address7"));
stdList.add(new Students(8,"std8","address8"));

现在,我需要将stdList分成两组,其中包含相同数量的学生,在这种情况下说4,并将它们添加到我实现的hashMap:

 int j=0;
 HashMap<Integer,List<Students>> hm = new HashMap<>();
    for (int i = 0; i < stdList.size(); i = i + 4) 
  {
     j++;
     hm.put(j,stdList.subList(i, i + 4));

  }

哈希映射现在包含键值对:

{1=[1 std1 address1, 2 std2 address2, 3 std3 address3, 4 std4 address4], 2=[5 std5 address5, 6 std6 address6, 7 std7 address7, 8 std8 address8]}

现在我需要将一个值“3 std3 address3”从“key 1”移动到“key 2”,如:

{1=[1 std1 address1, 2 std2 address2,  4 std4 address4], 2=[5 std5 address5, 6 std6 address6, 7 std7 address7, 8 std8 address8,3 std3 address3]}

我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:1)

假设“someKey”是你要移除的关键,那么

key1.put(someKey, key2.remove(someKey));

答案 1 :(得分:0)

List<Student> ls = hm.get(1);
Student st  = ls.get(3);
ls.remove(st); hm.get(2).add(st);

如果您可以通过索引访问列表,则无需搜索列表。

答案 2 :(得分:0)

解决方案是从HashMap获取学生列表并删除要移动的Student对象。然后从HashMap中获取另一个列表,只需添加对象。

我没有运行下面的代码,但它会是这样的

//Get the list for Key 1
List<Students> list = hm.get(Integer.valueOf(1));

//Remove the 3rd value, that would be your "3 std3 address3"
Students std = list.remove(2);

//Now get the list of Key 2
list = hm.get(Integer.valueOf(2));

//Add the value to that list
list.add(std);

答案 3 :(得分:0)

你可以这样做;

 Student stud3=myMap.get(1).remove(myMap.get(1).get(2));
 List<Student> secondList=myMap.get(2);
 secondList.add(stud3);
 myMap.put(2,secondList);

myMap是由你形成的地图。

答案 4 :(得分:0)

我想您知道如何搜索列表/地图中的元素,以及如何删除/添加它们。您已在代码中显示它。您的要求只是这些方法调用的另一种组合,它们对您来说不会有问题。

猜测你不能进一步因为你有例外:

ConcurrentModificationException

因为我发现您使用了subList()方法。它将返回支持列表的视图。您可以更改该列表中的元素,但任何结构修改都会抛出该异常。

如果这是您遇到的问题,简单的解决方案是在您调用subList时创建新列表,例如new ArrayList(stdList.subList(i, i + 4)),然后您可以进行结构修改。

如果这不是你的问题,请发表评论,我会删除答案。

PS你可能想稍微改变你的数据结构,我不知道你的确切要求,但目前的结构不太方便.....你可以查看番石榴多图...... < / p>