【问题标题】:Search an arraylist containing class for a specific item name在包含特定项目名称的类的数组列表中搜索
【发布时间】:2013-11-06 19:42:23
【问题描述】:

我有一门课:

public class Test_Demo{
    public String name;
}

现在我有一个数组列表:

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 没有名称,但它有类,而类又具有名称。

【问题讨论】:

  • 不检查内部,遍历一遍,我认为不可能将特定变量检查到一系列对象中。

标签: java class search arraylist


【解决方案1】:

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

没有办法从 if any 类之外看到,有没有那个名字。

您必须迭代并查看。

【讨论】:

  • 那么有什么办法可以避免循环整个列表吗?我的意思是排序列表可能先按名称按字母顺序排列,然后再搜索?这会改善搜索吗?
  • 不,你做的很好。没有副作用。即使您搜索字符串的某些部分,即使您必须进行迭代。我想你不必担心时间。迭代所需的时间可以忽略不计。
【解决方案2】:

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

【讨论】:

  • 这会占用更多存储空间吗?时空权衡!?
  • 名称占用相同的存储空间,几乎没有添加有关集群的信息。肯定会在性能上优于空间。
  • 我会试一试的!感谢您的建议! :)
【解决方案3】:

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

【讨论】:

  • 我认为这可能有用,但我将不得不更改现有的数据结构!会试试的!谢谢
【解决方案4】:

首先在 Test_Demo 类中覆盖 equals 方法,然后使用 ArrayList contains 方法。

【讨论】:

    【解决方案5】:

    覆盖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方法。

    【讨论】:

    • 这不是和我一样吗?而且我觉得这可能需要更多时间!
    【解决方案6】:

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

    【讨论】:

      猜你喜欢
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      相关资源
      最近更新 更多