Java/使用一些变量在列表中搜索
我有一个对象人的链表Java/使用一些变量在列表中搜索,java,list,Java,List,我有一个对象人的链表 Class person{ int age; String name; String address } 现在,我想检查对象是否包含在列表中。但我的问题是,只有一些领域是相关的。例如,我想检查列表中是否包含18岁的人:tony 你支持吗?如果没有,哪种数据结构支持它?那么,您可以使用一个简单的循环 for (int i=0; i<list.size(); i++) { Person p = list.get(i); if (p.na
Class person{
int age;
String name;
String address
}
现在,我想检查对象是否包含在列表中。但我的问题是,只有一些领域是相关的。例如,我想检查列表中是否包含18岁的人:tony
你支持吗?如果没有,哪种数据结构支持它?那么,您可以使用一个简单的循环
for (int i=0; i<list.size(); i++) {
Person p = list.get(i);
if (p.name.equals("Tony") && p.age == 18) {
//p is the person you were looking for
//do whatever you wanted to do with p
//if you don't want to include duplicate "Tonies" then add a break;
}
}
你可以用一个简单的循环
for (int i=0; i<list.size(); i++) {
Person p = list.get(i);
if (p.name.equals("Tony") && p.age == 18) {
//p is the person you were looking for
//do whatever you wanted to do with p
//if you don't want to include duplicate "Tonies" then add a break;
}
}
好吧,你可以把你的人放在一个列表中,然后反复浏览:
for(Person p : personList){
if ("tony".equals(p.name) && p.age == 18){
//match - do some stuff
;
}
}
好吧,你可以把你的人放在一个列表中,然后反复浏览:
for(Person p : personList){
if ("tony".equals(p.name) && p.age == 18){
//match - do some stuff
;
}
}
列表中有方法containsobj,它比较o==null?e==null:o.equalse
所以,若您重写Person类中的equals方法,您可以执行list.containsobj,它会直接返回true/false。list有方法containsobj,它比较o==null?e==null:o.equalse
所以,如果您在Person类中重写equals方法,您可以执行list.containsobj,它会直接返回true/false。您可以这样检查
ArrayList<Person> persons=new ArrayList<Person>();
for(Person p : persons)
{
if (p.name.equals("Tony") && p.age == 18)
}
你可以这样检查
ArrayList<Person> persons=new ArrayList<Person>();
for(Person p : persons)
{
if (p.name.equals("Tony") && p.age == 18)
}
这个类可以映射到数据库中的一个表,并且您希望在年龄>18岁的情况下执行select*from person 有两种情况可以做到这一点:on没有索引:数据库将读取所有值,并与年龄字段值进行比较,list也一样:解析list元素,您将确定找到,但这是最慢的方法 另一个是对搜索的优化:在相关字段的数据库中添加索引。 在列表中,您可以使用其他数据收集来加快搜索速度
例如:LinkedHashSet>IndexedYage只需询问18岁或18岁之前的人,您将获得一系列ArrayList,需要使用addAll方法将其合并为一个。该类可以映射到数据库中的一个表,并且您希望在年龄>18岁的人中执行select*from 有两种情况可以做到这一点:on没有索引:数据库将读取所有值,并与年龄字段值进行比较,list也一样:解析list元素,您将确定找到,但这是最慢的方法 另一个是对搜索的优化:在相关字段的数据库中添加索引。 在列表中,您可以使用其他数据收集来加快搜索速度
例如:LinkedHashSet>IndexedYage只需询问18岁或18岁之前的用户,您将获得一系列需要使用addAll方法合并为一个的ArrayList。有点混乱,但您可以按如下方式覆盖equals方法:
class Person
{
int age;
String name;
String address;
Person(int a, String n, String ad) { age = a; name = n; address = ad; };
@Override
public boolean equals(Object o)
{
Person p = (Person)o;
if (p.age != -1 && age != -1 && p.age != age)
return false;
if (p.name != null && name != null && !p.name.equals(name))
return false;
if (p.address != null && address != null && !p.address.equals(address))
return false;
return true;
}
}
我假设-1和null是未初始化的值
用法:
有点混乱,但您可以如下覆盖equals方法:
class Person
{
int age;
String name;
String address;
Person(int a, String n, String ad) { age = a; name = n; address = ad; };
@Override
public boolean equals(Object o)
{
Person p = (Person)o;
if (p.age != -1 && age != -1 && p.age != age)
return false;
if (p.name != null && name != null && !p.name.equals(name))
return false;
if (p.address != null && address != null && !p.address.equals(address))
return false;
return true;
}
}
我假设-1和null是未初始化的值
用法:
这样做的问题是,无论你在哪里使用人对象,如果他们有相同的名字和年龄,他们将被认为是平等的,而且它将忽略地址,所以托尼在旧金山的18岁将被认为等于芝加哥的18岁,在托尼,这在所有情况下都是不正确的。这个问题是,无论你在哪里使用人对象,如果他们有相同的名字和年龄,他们将被认为是平等的,而且它会忽略地址,所以托尼在旧金山的18岁将被认为等于芝加哥18岁的托尼,这在所有情况下都可能是不正确的。