Java ArrayList 中的 contains() 方法是不是使用二进制搜索?

Posted

技术标签:

【中文标题】Java ArrayList 中的 contains() 方法是不是使用二进制搜索?【英文标题】: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()方法的代码吧? 【参考方案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 才能使用二进制搜索,通常是在对其进行排序之后。

【讨论】:

以上是关于Java ArrayList 中的 contains() 方法是不是使用二进制搜索?的主要内容,如果未能解决你的问题,请参考以下文章

Java ArrayList:当arraylist包含给定对象时,contains()方法返回false

[Java]ArrayList集合的contains方法

Java List.contains(ArrayList<String> 字段值等于 x)

java之判断集合中的元素是否重复

学号:201521123116 《java程序设计》第七周学习总结

ArrayList .contain 给出奇怪的输出