1

我有一个与对象人员的链接列表。

Class person{
   int age;
   String name;
   String address
}

现在,我想检查对象是否包含在列表中。但我的问题是,只有一些领域是相关的。例如,我想检查人员:tony, age 18 是否包含在列表中。

列表支持吗?如果不是,哪种数据结构支持它?

4

6 回答 6

3

好吧,你可以使用一个简单的循环。

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;
    }
}
于 2013-03-14T15:22:24.087 回答
2

好吧,您可以将您的人员放入 aList<Person>并对其进行迭代:

for(Person p : personList){
    if ("tony".equals(p.name) && p.age == 18){
        //match - do some stuff
        ;
    }
}
于 2013-03-14T15:22:25.883 回答
2

列表有contains(obj)它比较的方法(o==null ? e==null : o.equals(e))

因此,如果您equals在 Person 类中覆盖方法,并且您可以这样做list.contains(obj),它会直接返回 true/false。

于 2013-03-14T15:22:53.357 回答
2

你可以像这样检查

ArrayList<Person> persons=new ArrayList<Person>();

检查人员

这样做

for(Person p : persons)
{
 if (p.name.equals("Tony") && p.age == 18)
}
于 2013-03-14T15:24:24.483 回答
2

此类可以映射到数据库中的表,并且您要执行 select * from person where age > 18。

有两种情况: on is without index:数据库将读取所有值,并将与年龄字段值进行比较,列表也是如此:解析列表元素,你会发现,但这是最慢的方法。

另一种是对搜索的优化:将数据库索引添加到相关字段。在列表中,您可以收集其他数据以加快搜索速度。

例如: LinkedHashSet>indexedByAge只需询问谁是 18 岁或 18 岁之前,您将得到一系列需要使用 addAll() 方法合并到一个的 ArrayList。

于 2013-03-14T15:27:08.690 回答
1

有点乱,但您可以按如下方式覆盖该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是未初始化的值。

用法:

ArrayList<Person> arr = new ArrayList<Person>();
arr.add(new Person(18,"tony","here"));
System.out.println(arr.contains(new Person(18,"tony",null))); // prints true
于 2013-03-14T15:30:05.940 回答