【发布时间】:2014-09-28 01:24:33
【问题描述】:
大家好,
在开发我的项目时,我实现了这样一个场景。我有一个 LinkedList,其中包含 100 Student 类对象。
我的情况是,
我需要从LinkedList 获取一个特定的Student 类对象,其中rollNo = 98。所以我使用了下面的代码。
我的 pojo 课是,
public class Student {
private int rollNo ;
private String name;
// getters & setters
}
我的主要课程是,
public class MainClass {
List<Student> list = null;
public MainClass(){
list = new LinkedList<Student>();
}
public static void main(String... args){
MainClass mainClass = new MainClass();
mainClass.addStudentDetail();
Student obj = mainClass.getStudentObject(98);
// other Stuff with obj
}
private void addStudentDetail() {
for(int i=1; i<=100; i++){
Student obj = new Student();
obj.setRollNo(i);
obj.setName("Name"+i);
list.add(obj);
}
}
private Student getStudentObject(int rollNo) {
int listLength = list.size();
for(int i=0; i<listLength; i++){
if(list.get(i).getRollNo() == rollNo)
return list.get(i);
}
return null;
}
}
获取 rollNo = 98 的 Student 对象,
这需要98 iterations。
如果我的列表大小是 1,00,000 并且我需要 rollNo = 99,999 的 Student 对象会发生什么?
有没有其他简单的方法可以使用where condition 获取一个特定对象?
注意:
抱歉,我不需要使用 HashMap 和 rollNo 作为键。我的需要是只使用LinkedList。这是我的要求。
希望我能在这里得到一个好的解决方案。
【问题讨论】:
-
如果卷号是唯一的,使用地图。
-
你应该阅读Map。
-
When to use LinkedList<> over ArrayList<>?。同样作为suggested by injecteer,如果将来您想根据元素的属性之一对元素下注,则可以使用 Map。
-
如果您的列表是按 rollNo 排序的(就像代码中一样),您可以使用二进制搜索方法在 O(LogN) 时间内获取结果
-
@DownVoter 请不要犹豫写 cmets。
标签: java performance list collections