有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在数组中搜索数据(列表)

我有一个ArrayList包含Attributes

class Attribute{
  private int id;
  public string getID(){
    return this.id;
  }

  private string value;
  public string getValue(){
    return this.value;
  }

  //... more properties here...
}

我在ArrayList中填充了数百个这样的属性。我想找到具有已定义ID的属性。我想做如下操作:

ArrayList<Attribute> arr = new ArrayList<Attribute>();
fillList(arr); //Method that puts a lot of these Attributes in the list
arr.find(234); //Find the attribute with the ID 234;

在ArrayList上循环是唯一的解决方案


共 (3) 个答案

  1. # 1 楼答案

    如果您希望使用元素属性访问集合的元素,并且该属性保证每个元素都是唯一的,那么您真的应该使用映射。尝试使用该属性的贴图。身份证是钥匙

  2. # 2 楼答案

    嗯,有些东西必须在数组列表上循环,是的。有各种各样的方法,不同的图书馆等等

    如果以有序的方式填充数组(例如,使低ID总是优先于高ID),则可以在O(logn)时间内执行二进制搜索。否则,它将是O(N)

    然而,如果你想通过ID进行大量搜索,为什么不先创建一个Map<Integer, Attribute>来开始呢?例如,如果你想保持顺序,可以创建一个HashMap,或者一个LinkedHashMap

    然而,如果你只想搜索一个(或几个)ID,这几乎肯定是不值得的——毕竟,散列是要付出代价的;填写地图比填写列表更昂贵,而且差异可能大于查找几个ID所节省的时间

    您是否已经确定这是一个性能瓶颈?如果是这样的话,这是一个很容易改进的地方,可以使用地图(或者只是一个带有二进制搜索的排序列表)。如果不是,我不会打扰你的代码,如果它更自然地使用列表而不是地图——但你肯定应该检查它是否是瓶颈

  3. # 3 楼答案

    你想用Map