List<String> list = new ArrayList<String>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
.
.
假设我不知道list中各个值的下标,在这种情况下用最快的方法,取出“cc”。
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
.
.
假设我不知道list中各个值的下标,在这种情况下用最快的方法,取出“cc”。
ArrayList是一个顺序存储的数据结构,只能顺序存储吧,查询数据也就只能用顺序遍历。。。。
如果是已经排序的,那么二分查找是可以的,没排序的话顺序遍历吧 一般吧 要想快,用HashMap或者HashSet之类的
如果是已经排序的,那么二分查找是可以的,没排序的话顺序遍历吧 一般吧 要想快,用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)
{
List<String>list = new ArrayList<String>();
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<size;i++)
{
if(strArray[i]==null)
{
return i;
}
}
}
else
{
for(int i=0;i<size;i++)
{
if(key.equals(strArray[i]))
{
return i;
}
}
}
return -1;//没有这个key
}
}