0

我的文本文件包含以下数据... dept->studentId-StudentData(name and email)..
IT-> 1->john->john@ymail.com CSE-
>2->Santosh->s@gmail.com
IT->3->Mike->mike@ymail.com
首先,我将 studentId 作为键存储,将 studentData 和 dept 作为值存储在 hashmap 中,并添加到 arraylist(多个对象的列表 - 每行的每个列表对象) . 现在,以 dept 为键,我如何从我的列表中检索 StudentId 和 studentData?比如说,以 IT 作为我的地图键,我如何从我的列表中获取数据并将其存储为键的值?(它应该显示 IT 的两个匹配行)。

我是使用收藏的新手,并提前感谢为完成此工作提供的任何帮助。

4

2 回答 2

2

为什么不使用学生对象而不是 ArrayList。它还将使您的代码更有条理。

使 HashMap < String, Student > 其中 string 是学生 id,Student 是具有所有学生属性的类。

class Student{
     String name;
     String dept;
     String email;

     /** Getters & Setters **/

}

因此,下次您只需使用 map.get("STUDENT_ID_HERE").getName() 或 getDept() 等。

于 2013-05-21T10:36:48.030 回答
1

您的问题是非学生 ID 数据存储为值,而不是键。
这是通过非键值搜索时的困难之一。如果您的搜索值不是键,那么您需要遍历所有值以查找匹配项。

保留您当前的解决方案,但实现一个getDeptMapping(String deptID)迭代所有值并检索匹配部门 ID 列表的方法。您可以通过map.EntrySet()做到这一点。

一些伪代码:

public ArrayList<Entry<Key, Value> getDeptMappings(String deptID) {

  //get entry mappings
  Set<Entry<Key, Value>> entrySet = dataMap.entrySet()

  //Create a Entry ArrayList to hold the results
  ArrayList<Entry<Key, Value>> resultList = new ArrayList<Entry<Key. Value>>();

  //Instanciate Set Iterator and retrieve first entry value
  Iterator<Entry<Key, Value>> iter = entrySet.iterator();
  Entry<Key, Value> currentEntry = iter.next();      

  while (iter.hasNext()) {
     //Use currentEntry.getValue() to get the value list from currentEntry
     //Compare list index points values where you stored the department ID during 
     //creation with the method parameter
     //If comparison is true, add this entry to the resultList you 
     //created above.
  }

  //When iteration is complete, return the result list

}

与通过键检索O(1)O(log n)取决于实现的常规地图检索不同,此解决方案以线性时间执行,因此O(n). 请注意,您必须插入自己的类型Key作为Value对象Entry。我假设您用作String键和ArrayList<String>值。

于 2013-05-21T11:51:30.673 回答