Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/使用一些变量在列表中搜索_Java_List - Fatal编程技术网

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岁的托尼,这在所有情况下都可能是不正确的。