2012-04-19 40 views
0

對不起,問另一個真正明顯的問題 - 我與掙扎包含HashMap ..如何更改值的位置列表中的一個HashMap在Java中

我想要做的是改變的地方順序值存儲在存儲在散列表中的列表中,我不想使用迭代器。

例如,在學校有一個課程列表,每個課程都有一個學生列表。在那裏,大廳監控工作是隨機挑選的課程的第一名學生。選擇一門課程後,列表頂部的學生將被列入所有課程列表的底部。有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

你可以改變的String []到一個ArrayList ? – barsju 2012-04-19 13:05:41

+0

對不起,我應該更加精確地展示它如何初始化,列表是一個ArrayList字符串 – damagedgoods 2012-04-19 13:12:17

+0

也許我沒有得到你的問題,但也許你正在掙扎,因爲地圖中的順序是由他們的迭代器保證的。從[API文檔](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Map.html):「地圖的*順序*被定義爲其中的地圖集合視圖上的迭代器返回它們的元素,一些地圖實現,比如TreeMap類,對它們的順序做出了特定的保證;其他的,比如HashMap類,則不這樣做。 – Fuhrmanator 2012-04-19 13:15:17

回答

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); 
     } 
    } 
} 
0

考慮SortedMap這項任務。

實現您自己的比較器以反映您要使用的排序順序。

1

您需要修改的列表,而不是地圖。因此,代碼應該是:

for (List<String> list : qualifiedStudents.values()) { 
    if (list.remove(studentName)) { 
     list.add(studentName); 
    } 
} 
0

如果我理解正確的話,你只是想重新排列每個課程每列表中的學生。

for(List<String> studentsInCourse : qualifiedStudents.values()) { 
     if (studentsInCourse.remove(studentName)) { 
      studentsInCourse.add(0, studentName); 
     } 
    } 
+0

是的100%,但我希望它們在列表的末尾而不是ArrayList中的第一個位置。 – damagedgoods 2012-04-19 13:22:43

0

現在它看起來像你正試圖撈出,放在一個String對象從/到你的HashMap時HashMap中的值類型爲String數組。

如果您有:

qualifiedStudents.remove(course, studentName); 
    qualifiedStudents.put(course, studentName); 

你想,而不是獲取到字符串數組引用(「當然,」我相信),並在周圍移動studentName字符串。像barsju說,使用ArrayList可能比使用String數組更容易。

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); 
    } 
    } 

    } 
相關問題