List list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
.
.
假设我不知道list中各个值的下标,在这种情况下用最快的方法,取出“cc”。
ArrayList是一个顺序存储的数据结构,只能顺序存储吧,查询数据也就只能用顺序遍历。。。。
如果是已经排序的,那么二分查找是可以的,没排序的话顺序遍历吧 一般吧 要想快,用HashMap或者HashSet之类的
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;
- }
所以模仿源码,应该是最快的:
- package littlejava;
- import java.util.ArrayList;
- import java.util.List;
- public class ListIter
- {
- public static void main(String []args)
- {
- Listlist = new ArrayList();
- list.add("aa");
- list.add("bb");
- list.add("cc");
- list.add("dd");
- list.add("ee");
- int index=indexof(list,"cc");
- System.out.println(index);
- }
-
- /*
- * 最快的方法的遍历
- */
- public static int indexof(List list,String key)
- {
- Object [] strArray=list.toArray();
-
- int size = strArray.length;
- if(key==null)
- {
- for(int i=0;i
- {
- if(strArray[i]==null)
- {
- return i;
- }
- }
- }
- else
- {
- for(int i=0;i
- {
- if(key.equals(strArray[i]))
- {
- return i;
- }
- }
- }
- return -1;//没有这个key
- }
- }