最快的方法从list中取指定的值

5620阅读 0评论2012-06-28 nba76ers
分类:Java

List list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
.
.
假设我不知道list中各个值的下标,在这种情况下用最快的方法,取出“cc”。

ArrayList是一个顺序存储的数据结构,只能顺序存储吧,查询数据也就只能用顺序遍历。。。。
如果是已经排序的,那么二分查找是可以的,没排序的话顺序遍历吧 一般吧 要想快,用HashMap或者HashSet之类的

indexOf("cc")还不是遍历整个线性表,源码是

点击(此处)折叠或打开

  1. public int indexOf(Object o) {
  2.     if (o == null) {
  3.      for (int i = 0; i < size; i++)
  4.         if (elementData[i]==null)
  5.          return i;
  6.     } else {
  7.      for (int i = 0; i < size; i++)
  8.         if (o.equals(elementData[i]))
  9.          return i;
  10.     }
  11.     return -1;
  12.     }
所以模仿源码,应该是最快的:

点击(此处)折叠或打开

  1. package littlejava;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. public class ListIter
  5. {
  6.     public static void main(String []args)
  7.     {
  8.         Listlist = new ArrayList();
  9.         list.add("aa");
  10.         list.add("bb");
  11.         list.add("cc");
  12.         list.add("dd");
  13.         list.add("ee");
  14.         int index=indexof(list,"cc");
  15.         System.out.println(index);
  16.     }
  17.     
  18.     /*
  19.      * 最快的方法的遍历
  20.      */
  21.     public static int indexof(List list,String key)
  22.     {
  23.         Object [] strArray=list.toArray();
  24.         
  25.         int size = strArray.length;
  26.         if(key==null)
  27.         {
  28.             for(int i=0;i
  29.             {
  30.                 if(strArray[i]==null)
  31.                 {
  32.                     return i;
  33.                 }
  34.             }
  35.         }
  36.         else
  37.         {
  38.             for(int i=0;i
  39.             {
  40.                 if(key.equals(strArray[i]))
  41.                 {
  42.                     return i;
  43.                 }
  44.             }
  45.         }
  46.         return -1;//没有这个key
  47.     }
  48. }

上一篇:数据库索引
下一篇:mysql创建函数