1

我有一个包含学生对象的 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));

  }

hashmap 现在包含键值对:

{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]}

我怎样才能做到这一点?

4

5 回答 5

2

假设“someKey”是您要删除的密钥,然后

key1.put(someKey, key2.remove(someKey));
于 2013-10-31T12:50:11.190 回答
0
List<Student> ls = hm.get(1);
Student st  = ls.get(3);
ls.remove(st); hm.get(2).add(st);

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

于 2013-10-31T12:49:35.693 回答
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);
于 2013-10-31T12:50:52.843 回答
0

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

你不能走得更远,因为你有一个例外:

ConcurrentModificationException

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

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

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

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

于 2013-10-31T13:13:49.703 回答
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 是您形成的地图。

于 2013-10-31T12:56:35.650 回答