问题描述
List<String> list = new ArrayList<String>();list.add("aa");list.add("bb");list.add("cc");list.add("dd"); . . .假设我不知道list中各个值的下标,在这种情况下用最快的方法,取出“cc”。
解决方案
ArrayList是一个顺序存储的数据结构,只能顺序存储吧,查询数据也就只能用顺序遍历。。。。如果是已经排序的,那么二分查找是可以的,没排序的话顺序遍历吧一般吧 要想快,用HashMap或者HashSet之类的
解决方案二:
indexOf("cc")
解决方案三:
我觉得很简单啊, list.get(2)
解决方案四:
list.indexOf("dd")
解决方案五:
直接二分,一般的数据是从数据库取出来的,你可以再取出来得时候就order by 下,要是不是数据库取出来的数据,我就不知道除了上面答案的好方法了!
解决方案六:
我前几天看过一些资料,知道遍历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")){} }
解决方案七:
如果list中,有重复值的话,用HashMap可能不对
解决方案八:
indexOf("cc")还不是遍历整个线性表,源码是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; }
解决方案:
list .get(list.indexOf("cc") )
解决方案:
引用indexOf("cc");indexOf("cc"); String类中的方法HashMap键值对应该是最快的。
解决方案:
用hashmap吧,set的话还是需要遍历,不适合这种取值的场景。假如同样size,hashmap还是要快一些的。
解决方案:
如你所诉 二分查找快
解决方案:
indexOf
解决方案:
List只能是循环,一个个比较了。List.remove("cc")可以删除cc。要快速,改用Set,他是直接命中的,不用一个个比较。