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上循环是唯一的解决方案
# 1 楼答案
如果您希望使用元素属性访问集合的元素,并且该属性保证每个元素都是唯一的,那么您真的应该使用映射。尝试使用该属性的贴图。身份证是钥匙
# 2 楼答案
嗯,有些东西必须在数组列表上循环,是的。有各种各样的方法,不同的图书馆等等
如果以有序的方式填充数组(例如,使低ID总是优先于高ID),则可以在O(logn)时间内执行二进制搜索。否则,它将是O(N)
然而,如果你想通过ID进行大量搜索,为什么不先创建一个
Map<Integer, Attribute>
来开始呢?例如,如果你想保持顺序,可以创建一个HashMap
,或者一个LinkedHashMap
然而,如果你只想搜索一个(或几个)ID,这几乎肯定是不值得的——毕竟,散列是要付出代价的;填写地图比填写列表更昂贵,而且差异可能大于查找几个ID所节省的时间
您是否已经确定这是一个性能瓶颈?如果是这样的话,这是一个很容易改进的地方,可以使用地图(或者只是一个带有二进制搜索的排序列表)。如果不是,我不会打扰你的代码,如果它更自然地使用列表而不是地图——但你肯定应该检查它是否是瓶颈
# 3 楼答案
你想用Map