很抱歉提出另一个非常明显的问题 - 我正在努力使用哈希映射..
我想要做的是更改存储在hashmap中的列表中存储值的顺序,我不想使用迭代器。
例如,学校有一个课程列表,每个课程都有一个学生列表。在那里,大厅监控工作是随机挑选的课程列表中的第一个学生。选择课程后,列表顶部的学生将被列入其列出的所有课程的列表底部。有9门课程,学生可以出现在多个学生名单上。我正在尝试做一些事情:
//instance variable
private HashMap<String, String[]> qualifiedStudents;
qualifiedStudents = new HashMap<String, List<String>>();
public void putStudentLastInRosters(String studentName)
{
for(String course : qualifiedStudents.keySet())
{
if(qualifiedStudents.get(course).contains(studentName))
{
qualifiedStudents.remove(course, studentName);
qualifiedStudents.put(course, studentName);
}
}
}
答案 0 :(得分:1)
试试这个:
//instance variable
private HashMap<String, List[]> qualifiedStudents;
qualifiedStudents = new HashMap<String, List<String>>();
public String putStudentLastInRosters(String studentName) {
for(String course : qualifiedStudents.keySet()) {
List<String> students = qualifiedStudents.get(course);
if(students.remove(studentName)) {
students.add(studentName);
}
}
}
答案 1 :(得分:1)
您需要修改列表,而不是地图。所以代码应该是:
for (List<String> list : qualifiedStudents.values()) {
if (list.remove(studentName)) {
list.add(studentName);
}
}
答案 2 :(得分:0)
考虑SortedMap执行此任务。
实现您自己的比较器以反映您要使用的排序顺序。
答案 3 :(得分:0)
如果我理解正确,您只想在每个课程的每个列表中重新排序学生。
for(List<String> studentsInCourse : qualifiedStudents.values()) {
if (studentsInCourse.remove(studentName)) {
studentsInCourse.add(0, studentName);
}
}
答案 4 :(得分:0)
现在,当HashMap的值类型为String数组时,您似乎正在尝试从/向HashMap中删除并放置String对象。
你在哪里:
qualifiedStudents.remove(course, studentName);
qualifiedStudents.put(course, studentName);
你想要获得对String数组的引用(我相信“course”)并在其中移动studentName字符串。就像barsju所说,使用ArrayList可能比使用String数组更容易。
答案 5 :(得分:0)
以下内容将返回班级中学生的ArrayList,并允许您执行删除和添加操作。我们只需删除studentsName,然后阅读即可。在链表中,这会将它添加到ArrayList的末尾。
qualifiedStudents.get(course)
我重新声明了你的HashMap。
//instance variable
private HashMap<String, ArrayList<String>> qualifiedStudents = new HashMap<String, ArrayList<String>>();
public void putStudentLastInRosters(String studentName)
{
for(String course : qualifiedStudents.keySet())
{
if(qualifiedStudents.get(course).contains(studentName))
{
qualifiedStudents.get(course).remove(studentName);
qualifiedStudents.get(course).add(studentName);
}
}
}