【问题标题】:Does the contains() method in Java ArrayList use binary search?Java ArrayList 中的 contains() 方法是否使用二进制搜索?
【发布时间】:2013-04-13 03:15:45
【问题描述】:

Java ArrayList 中的 contains() 方法是否使用二分查找?还是我需要使用 Collections 来代替?

【问题讨论】:

  • 你知道Java是开源的,你可以查看contains()方法的代码吧?

标签: java arraylist contains binary-search


【解决方案1】:

不,你需要使用Collections 来使用二分查找,通常是在排序之后。 ArrayList 对其排序一无所知,并且您必须知道列表已排序,然后才能使用二进制搜索。

或者,您可以使用TreeSet,它与使用二分搜索一样有效。

【讨论】:

    【解决方案2】:

    不,它不使用二进制搜索,因为列表不必排序。

    使用 Collections 类的实用方法首先对列表进行排序,然后执行二进制搜索。

    【讨论】:

      【解决方案3】:

      不,这意味着在每次插入时都会增加开销,因此不包括在内。

      这是源代码:它只是测试所有值:

      218     public boolean contains(Object o) {
      219         return indexOf(o) >= 0;
      220     }
      
      229     public int indexOf(Object o) {
      230         if (o == null) {
      231             for (int i = 0; i < size; i++)
      232                 if (elementData[i]==null)
      233                     return i;
      234         } else {
      235             for (int i = 0; i < size; i++)
      236                 if (o.equals(elementData[i]))
      237                     return i;
      238         }
      239         return -1;
      240     }
      

      【讨论】:

        【解决方案4】:

        不,您需要使用 Collections 才能使用二进制搜索,通常是在对其进行排序之后。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-19
          • 2014-08-20
          • 1970-01-01
          • 2013-04-20
          • 1970-01-01
          • 2015-01-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多