Java 在列表中查找值
我已将名单申报为Java 在列表中查找值,java,list,collections,Java,List,Collections,我已将名单申报为 private List<Employees> employees; 然而,我得到演员例外 非常感谢您的帮助 谢谢 如果每次对列表进行排序并进行搜索,代码复杂度将是nlogn+logn,其中nlogn表示排序列表,logn表示二进制搜索 最好是线性搜索列表。线性搜索将采用BigO-n,其性能优于以前的方法 您在CollectionSort方法中获得强制转换异常,因为您的列表包含空值,如果您不能使用,则无法强制转换Employee并引发ClassCa
private List<Employees> employees;
然而,我得到演员例外
非常感谢您的帮助
谢谢
如果每次对列表进行排序并进行搜索,代码复杂度将是nlogn+logn,其中nlogn表示排序列表,logn表示二进制搜索
最好是线性搜索列表。线性搜索将采用BigO-n,其性能优于以前的方法
您在CollectionSort方法中获得强制转换异常,因为您的列表包含空值,如果您不能使用,则无法强制转换Employee并引发ClassCastException
myDAO.getEmployees(parameter);
在DAO中放一个where子句
然后,您可以对一个对象执行搜索
Employee emp = null;
for(Employee e : employees) {
if(e.getName().equals("X"))
emp = e;
}
if(emp != null) {
//handle the found employee
}
else {
//employee not in list
}
当然,您也可以重写它的equals方法,用该列实例化一个对象,然后使用我不推荐的方法
myDAO.getEmployees().get(object);
迭代列表并执行搜索操作:
String searchString = "abc";
for(Employee employee: employees) {
if(employee.getName().equals(searchString)) {
// Found something!
}
}
如果要搜索Employee的所有字段,可能需要在Employee中创建一个检查实例上所有字段的方法:
boolean findString(String searchString) {
if(getName().equals(searchString)) return true;
if(getCity().equals(searchString)) return true;
// etc..
return false;
}
在for循环中使用此方法。如果您的列表非常大,我建议在DAO中进行搜索-dbs可以调整为这种搜索的最佳性能,例如从员工中选择*,其中name='abc',然后使用DAO方法仅返回匹配的项 另一个不错的选择是apachecommons 乙二醇 显然,参数化出abc。如果要重用谓词,请将其设置为命名类
如果您有许多不同的方法来过滤集合,谓词实现尤其有用;另外,它让equals可以自由地进行真正的相等性检查。您走在了正确的轨道上。简单地重写Employees中的equals方法不应该是Employeer吗?它描述的是一组员工还是只有一名员工 您的代码应该可以工作。您还可以按上述方式对员工进行分类,并提供一个比较指标:
Collections.sort(fields, new Comparator<Employee>() {
@Override
public int compare(Employee o1,Employee o2) {
// TODO Rerturn 0 if equal or either 1 or -1 depending which of o1 or o2 is the bigger
}
})
在后一种方法中,您不需要重写equals方法。查找值是什么意思?您面临的问题是什么?可能是您试图在员工对象列表中搜索abc字符串吗?@NikolayKuznetsov我有一个名为abc的字符串,我想在员工列表中查找abc员工不是字符串。如果您遇到异常,您应该始终指定异常发生的确切代码行。如果存在异常消息,则应指定异常消息。这使人们更容易帮助你,从而使你更有可能得到适当的帮助。这是解决他的问题的最好办法吗?“最好”是有争议的,它是解决他的问题的办法。这个答案没有错+1.可以将搜索传递到数据库,避免搜索整个列表。然而,这并不总是可能的;int index=Collections.binarySearchemployees,abc;编译时,我得到了类java.util.Collectionsabc中找不到的sortjava.util.List,您应该传递Employee对象。binarySearchList@Polppan,员工是否实现了可比接口?
Employee emp = null;
for(Employee e : employees) {
if(e.getName().equals("X"))
emp = e;
}
if(emp != null) {
//handle the found employee
}
else {
//employee not in list
}
myDAO.getEmployees().get(object);
String searchString = "abc";
for(Employee employee: employees) {
if(employee.getName().equals(searchString)) {
// Found something!
}
}
boolean findString(String searchString) {
if(getName().equals(searchString)) return true;
if(getCity().equals(searchString)) return true;
// etc..
return false;
}
matches = CollectionUtils.filter(employees, new Predicate<Employee>()
{
@Override
public boolean evaluate(Employee object)
return "abc".equals(object.getName());
}
});
Collections.sort(fields, new Comparator<Employee>() {
@Override
public int compare(Employee o1,Employee o2) {
// TODO Rerturn 0 if equal or either 1 or -1 depending which of o1 or o2 is the bigger
}
})