如何在Java中更改hashmap列表中值的位置
很抱歉问了另一个非常明显的问题-我正在努力解决哈希映射 我想做的是改变值在hashmap中存储的列表中的存储顺序,我不想使用迭代器 例如,一所学校有一份课程列表,每门课程都有一份学生列表。在那里,霍尔班长的工作是随机挑选的课程名单上的第一个学生。当选择一门课程时,位于列表顶部的学生将被放在他们所参加的所有课程的列表底部。共有9门课程,一名学生可以出现在多个学生名单上 我正试图按照以下思路做一些事情:如何在Java中更改hashmap列表中值的位置,java,arraylist,hashmap,Java,Arraylist,Hashmap,很抱歉问了另一个非常明显的问题-我正在努力解决哈希映射 我想做的是改变值在hashmap中存储的列表中的存储顺序,我不想使用迭代器 例如,一所学校有一份课程列表,每门课程都有一份学生列表。在那里,霍尔班长的工作是随机挑选的课程名单上的第一个学生。当选择一门课程时,位于列表顶部的学生将被放在他们所参加的所有课程的列表底部。共有9门课程,一名学生可以出现在多个学生名单上 我正试图按照以下思路做一些事情: //instance variable private HashMap<String, S
//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);
}
}
}
//实例变量
私人HashMap合格学生;
qualifiedStudents=newhashmap();
public void putStudentLastInRosters(字符串studentName)
{
对于(字符串课程:qualifiedStudents.keySet())
{
if(qualifiedStudents.get(course.contains)(studentName))
{
合格学生。删除(课程,学生姓名);
合格学生。put(课程,学生姓名);
}
}
}
考虑执行此任务
实现您自己的比较器以反映您想要使用的排序顺序。尝试以下方法:
//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);
}
}
}
//实例变量
私人HashMap合格学生;
qualifiedStudents=newhashmap();
公共字符串putStudentLastInRosters(字符串studentName){
对于(字符串课程:qualifiedStudents.keySet()){
列出学生=合格学生。获取(课程);
if(students.remove(studentName)){
添加(studentName);
}
}
}
您需要修改列表,而不是地图。因此,代码应该是:
for (List<String> list : qualifiedStudents.values()) {
if (list.remove(studentName)) {
list.add(studentName);
}
}
for(列表:qualifiedStudents.values()){
如果(列表移除(学生姓名)){
列表。添加(学生姓名);
}
}
如果我理解正确,您只需在每个课程的每个列表中对学生重新排序即可
for(List<String> studentsInCourse : qualifiedStudents.values()) {
if (studentsInCourse.remove(studentName)) {
studentsInCourse.add(0, studentName);
}
}
for(列出学生课程:qualifiedStudents.values()){
if(studentsInCourse.remove(studentName)){
studentsInCourse.add(0,studentName);
}
}
现在,当HashMap的值类型为字符串数组时,您似乎正在尝试从HashMap中删除字符串对象,并将其放入HashMap中
如果您有:
qualifiedStudents.remove(course, studentName);
qualifiedStudents.put(course, studentName);
您希望获得对字符串数组的引用(我相信是“课程”),并在其中移动studentName字符串。正如barsju所说,使用ArrayList可能比使用字符串数组容易。下面将返回类中学生的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);
}
}
}
//实例变量
private HashMap qualifiedStudents=new HashMap();
public void putStudentLastInRosters(字符串studentName)
{
对于(字符串课程:qualifiedStudents.keySet())
{
if(qualifiedStudents.get(course.contains)(studentName))
{
合格学生。获取(课程)。删除(学生姓名);
合格学生。获取(课程)。添加(学生姓名);
}
}
}
能否将字符串[]更改为ArrayList?很抱歉,我本应该更精确地显示它的初始化方式,列表是ArrayList字符串。也许我没有理解您的问题,但也许您正在努力,因为映射中的顺序是由迭代器保证的。来自:“映射的顺序定义为映射集合视图上的迭代器返回其元素的顺序。一些映射实现(如TreeMap类)对其顺序做出特定保证;其他映射实现(如HashMap类)则不这样做。”是的,100%,但我希望他们在列表的末尾,而不是在ArrayList中的第一个位置。