我的文本文件包含以下数据... 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 的两个匹配行)。
我是使用收藏的新手,并提前感谢为完成此工作提供的任何帮助。
问问题
560 次
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 回答