List list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
.
.
.
假设我不知道list中各个值的下标,在这种情况下用最快的方法,取出“cc”。
ArrayList是一个顺序存储的数据结构,只能顺序存储吧,查询数据也就只能用顺序遍历。。。。
如果是已经排序的,那么二分查找是可以的,没排序的话顺序遍历吧
一般吧 要想快,用HashMap或者HashSet之类的
List只能是循环,一个个比较了。
List.remove("cc")可以删除cc。
要快速,改用Set,他是直接命中的,不用一个个比较。
indexOf
如你所诉 二分查找快
indexOf("cc")
用hashmap吧,set的话还是需要遍历,不适合这种取值的场景。假如同样size,hashmap还是要快一些的。
[quote]
indexOf("cc");
[/quote]
indexOf("cc"); String类中的方法
HashMap键值对应该是最快的。
list .get(list.indexOf("cc") )
indexOf("cc")还不是遍历整个线性表,源码是[code="java"]
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}[/code]
如果list中,有重复值的话,用HashMap可能不对
我前几天看过一些资料,知道遍历list的最快的方式是:
Object o[];
o = list.toArray();
for (Object element : o) {
String str = (String) element;
}
反正都是遍历何不找个遍历最快的方式:
Object o[];
o = list.toArray();
for (Object element : o) {
String str = (String) element;
if(str.equals("cc")){
}
}
直接二分,一般的数据是从数据库取出来的,你可以再取出来得时候就order by 下,要是不是数据库取出来的数据,我就不知道除了上面答案的好方法了!
list.indexOf("dd")
我觉得很简单啊, list.get(2)