Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,在另一个数组中查找数组的最快方法是什么?_Java_Arrays_Search - Fatal编程技术网

在Java中,在另一个数组中查找数组的最快方法是什么?

在Java中,在另一个数组中查找数组的最快方法是什么?,java,arrays,search,Java,Arrays,Search,数组是否有String.indexOf的等效项?如果没有,除了线性搜索之外,还有没有其他更快的方法在另一个数组中查找数组?据我所知,没有线性搜索就无法在另一个数组中查找数组。indexOf在库中使用线性搜索 您应该编写一个名为indexOf的小库,它包含两个数组,然后您将得到与indexOf类似的代码 但不管你怎么做,这都是一个隐藏的线性搜索 编辑: 在看了@ahmadabolkader的答案后,我有点收回了这句话。尽管它仍然是一个线性搜索,但它并不像实现它那样简单,除非您仅限于相当小的测试集/

数组是否有String.indexOf的等效项?如果没有,除了线性搜索之外,还有没有其他更快的方法在另一个数组中查找数组?

据我所知,没有线性搜索就无法在另一个数组中查找数组。indexOf在库中使用线性搜索

您应该编写一个名为indexOf的小库,它包含两个数组,然后您将得到与indexOf类似的代码

但不管你怎么做,这都是一个隐藏的线性搜索

编辑:

在看了@ahmadabolkader的答案后,我有点收回了这句话。尽管它仍然是一个线性搜索,但它并不像实现它那样简单,除非您仅限于相当小的测试集/结果

当您想查看…aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

我的想法是,一旦你找到了第一个匹配的角色,你就可以一对一地检查所有后续的角色,但是当大多数角色在大部分时间都匹配时,性能会下降得可怕。@a12r的答案中有一个滚动散列方法,如果这是一个现实问题,而不仅仅是一个赋值,听起来会更好


我将投票支持@a12r的答案,因为那些很棒的维基百科参考资料。

据我所知,如果不进行线性搜索,就无法在另一个数组中找到一个数组。indexOf在库中使用线性搜索

您应该编写一个名为indexOf的小库,它包含两个数组,然后您将得到与indexOf类似的代码

但不管你怎么做,这都是一个隐藏的线性搜索

编辑:

在看了@ahmadabolkader的答案后,我有点收回了这句话。尽管它仍然是一个线性搜索,但它并不像实现它那样简单,除非您仅限于相当小的测试集/结果

当您想查看…aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

我的想法是,一旦你找到了第一个匹配的角色,你就可以一对一地检查所有后续的角色,但是当大多数角色在大部分时间都匹配时,性能会下降得可怕。@a12r的答案中有一个滚动散列方法,如果这是一个现实问题,而不仅仅是一个赋值,听起来会更好


我将投票支持@a12r的答案,因为那些很棒的维基百科参考资料。

通常你在java集合中查找东西的方式是

将它们放在hashmap字典中,并根据它们的哈希查找它们。 循环遍历每个对象并测试其相等性 1不适用于您,因为数组对象的哈希不会告诉您内容是相同的。您可以编写某种包装器,根据内容创建哈希代码,还必须确保equals返回的值与此一致

2还需要一些工作,因为数组的对象相等性只会测试对象是否相同。您需要用内容测试包装数组


因此,基本上,除非您自己编写。

通常,您在java集合中查找内容的方式是

将它们放在hashmap字典中,并根据它们的哈希查找它们。 循环遍历每个对象并测试其相等性 1不适用于您,因为数组对象的哈希不会告诉您内容是相同的。您可以编写某种包装器,根据内容创建哈希代码,还必须确保equals返回的值与此一致

2还需要一些工作,因为数组的对象相等性只会测试对象是否相同。您需要用内容测试包装数组


因此,基本上,除非您自己编写。

简单的答案是否定的-没有比使用Java中的现有构造在数组中查找数组更快的方法。根据您所描述的,考虑创建数组的哈希集,而不是数组数组。

< P>简短的答案是否定的。在java中使用现有的构造,没有更快的方法来找到数组中的数组。根据你所描述的,考虑创建数组的哈希集而不是数组数组。

你的意思是你有一个数组,元素也是数组元素?如果是这种情况,并且元素已排序,您可能可以使用java.util.Arrays

您的意思是您有一个数组,哪些元素也是数组元素?如果是这种情况,并且元素已排序,那么无论数组的元素是什么,您都可以从java.util.Arrays使用,我相信这与字符串搜索问题没有太大区别

这提供了各种已知算法的一般介绍

这可能是你最好的选择


您应该能够找到这些算法的Java实现,并使它们适应您的问题。

无论数组的元素如何,我相信这与字符串搜索问题没有太大区别

List<Object> list = Arrays.asList(myArray);
Collections.sort(list);
int index = Collections.binarySearch(list, find);
这提供了各种已知算法的一般介绍

这可能是你最好的选择


您应该能够找到这些算法的Java实现,并使它们适应您的问题。

您能解释一下您想做什么吗?也许有一个代码示例。不,没有。你如何改进对未排序数组的线性搜索?你能解释一下你想做什么吗?也许有一个代码示例。不,没有。如何改进对未排序数组的线性搜索?我放置了许多方法,因为您的问题不是100%清楚。我认为第一个选择是最好的,如果你有一个非常大的集合。但我建议你们为了速度而尝试所有的方法。我放置了很多方法,因为你们的问题不是100%清楚。我认为第一个选择是最好的,如果你有一个非常大的集合。但是我建议你为了速度而尝试所有的方法。数组的散列集不会做你认为它能做的事情。我也不认为这是真正被问到的问题;我想它们是指子数组,而不是包含数组作为元素的数组,但我不确定。数组的哈希集不会像你想象的那样。我也不认为这是真正被问到的问题;我想他们指的是子数组,不是包含数组作为元素的数组,但我不确定。假设您谈论的是String.indexOfString str-如果您检查JDK附带的java代码,它似乎使用了简单的逐字符线性搜索,但是JVM在内部用一个类似穷人的Boyer Moore的内在函数来代替它,它创建了一个包含字符串中所有字符的位图,并尝试只检查每个第N个字符,其中N是要查找的字符串的长度-如果第N个字符不在位图中,您可以向前跳过N个字符,因为不可能有包含该位置的匹配。假设您谈论的是String.indexOfString str-如果您检查JDK中包含的java代码,它似乎使用了简单的逐字符线性搜索,但是JVM在内部用一个类似穷人的Boyer Moore的内在函数来代替它,它创建了一个包含字符串中所有字符的位图,并尝试只检查每个第N个字符,其中N是要查找的字符串的长度-如果第N个字符不在位图中,您可以向前跳过N个字符,因为不可能有包含该位置的匹配。
List<Object> list = Arrays.asList(myArray);
Collections.sort(list);
int index = Collections.binarySearch(list, find);
public static int indexOf(Object[] array, Object find){
  for (int i = 0; i < array.length(); i ++){
    if (array[i].equals(find)){
      return i;
    }
  }
  return -1;
}
Object[] array = ...
int index = Arrays.asList(array).indexOf(find);