1

我有一堂课:

public class Test_Demo{
    public String name;
}

现在我有一个arrayList:

public ArrayList<Test_Demo> tdArrayList= new ArrayList<Test_Demo>();

现在我创建一个上述类的对象并将其添加到 Arraylist:

Test_Demo td = new Test_Demo();
td.name="Hello";
tdArrayList.add(td);

现在我将名称比较为:

String testname="Hello";
for(int i=0;i<tdArrayList.size();i++){
    if(tdArrayList.get(i).name.equals(testname)){
        //name present, print here and break from loop
    }
}

这工作正常,但如果ArrayList 有很多项目,这种方法很慢。你能建议我更好的方法吗?
tdArrayList.contains(testname) 不起作用,因为 arrayList 没有名称,但它有类,而类又具有名称。

4

6 回答 6

4

在包含类的数组列表中搜索特定项目名称

如果 有任何班级,无论是否有这个名字,都没有办法从外面看到。

您必须迭代并查看。

于 2013-10-28T05:54:36.200 回答
1

一般来说,这是最好的方法。但是如果你想提高效率,那么你可以做ArrayList的集群,比如ArrayList存储以'A'、'B'开头的名字等等。然后,如果测试名称是“Hello”,则获取它的第一个字母“H”并在集群“H”中搜索。您可以根据需要增加集群的数量。这可能是一种解决方案。

于 2013-10-28T05:58:07.167 回答
1

我不确定上下文。但是尝试通过映射名称和对象来使用 hashmap 来回答。

于 2013-10-28T06:34:58.787 回答
0

首先覆盖类equals中的方法Test_Demo,然后使用 ArrayListcontains方法。

于 2013-10-28T05:53:33.413 回答
0

覆盖equals方法如下:

public class Test_Demo{
   public String name;
   public boolean equals(Object anObject) {
      if (this == anObject) {
         return true;
       }
     if (anObject instanceof Test_Demo) {
        Test_Demo test = (Test_Demo )anObject;
        if(test.name.equals(this.name)
           return true;
      }   
      return false;
   }
}

然后调用contains方法。

于 2013-10-28T06:00:29.650 回答
0

tdArrayList 中有多少项?迭代整个列表需要多长时间?也许您可以对列表进行排序,然后进行二进制搜索。

于 2013-10-28T06:54:17.713 回答