检查字符串是否属于数组的最有效/更快的方法

时间:2015-09-05 09:30:31

标签: javascript java arrays performance

我想找到最有效/最快速的方法来检查字符串是否属于Java和JavaScript中的数组。
例如,我想查找字符串"="是否属于数组{"+", "-", "=", "*", "/", "!"}

在Java中实现它的方法是(省略main方法)

String[] symbols = {"+", "-", "=", "*", "/", "!"};
String equalTo = "=";
for(String i: symbols) {
  if(equalTo.equals(i)) {
    System.out.print(equalTo + " belongs to symbols.");
  }
}

我想知道是否有一种方法可以在Java和JavaScript中为我工作。

我之所以用这两种语言提出这个问题的原因是我想看看它在Java或JavaScript中是否更容易。

4 个答案:

答案 0 :(得分:1)

JavaScript中的问题答案:How do I check if an array includes an object in JavaScript?

E.g。如果您搜索完整匹配,则可以使用:

["=", "+", "-"].indexOf("=") // => 1

答案 1 :(得分:1)

查看字符串是否在字符串集合中的最有效方法是此集合已经过哈希处理。例如,如果Java中有HashSet<String>,则可以使用{(1)}方法,该方法在O(1)中运行。

如果您的集合存储为.contains(String)或数组,则需要花费O(n)时间来检查字符串是否在集合中(也使用ArrayList<String>方法)。

将列表或数组转换为集合需要花费O(n)时间,但是比检查列表中是否有单个元素需要更长的时间。

所以,最后:

  • 如果您只想检查集合中的一个元素,只需遍历您显然已经拥有的列表,并检查该元素是否在列表中。对于数组,在Java中只需使用.contains(String),在JavaScript中使用Arrays.asList(symbols).contains(equalTo)
  • 如果要检查很多元素是否在集合中,那么最好先将集合转换为集合。在Java中,执行类似

    的操作
    symbols.contains(equalTo)

    之后你可以HashSet<String> set = new HashSet<String>(); set.addAll(Arrays.asList(symbols));

    对于JavaScript来说,这有点令人讨厌,但首先我的头脑是这样的:

    set.contains(equalTo)

    然后,您可以检查var set = Object.create(null); for (var i in symbols) { set[i] = true; }

很抱歉答案很长,但你要求效率吗?

答案 2 :(得分:0)

在Java中,您可以使用Arrays.asList(yourArray).contains(yourValue)。如果您使用jQuery,则可以使用$.inArray(yourValue, yourArray)

答案 3 :(得分:0)

&#34; best&#34;这样做的方式实际上取决于要匹配的值的数量以及需要执行的次数。

如果列表很长,并且您经常这样做,那么通过创建用于快速查找的set / map / associate-array,或者对值列表进行排序并执行二进制搜索,可以更好地服务。在Java中,这将是Set<String>Arrays.binarySearch()

但是,在你的情况下,列表很短,所以像你这样的顺序搜索就可以了。

但除此之外,您的值都是单字符,因此有一个解决方案恰好是Java和JavaScript的完全相同的解决方案:indexOf()

在Java中:

if ("+-=*/!".indexOf(value) != -1) {
    // found
}

在JavaScript中:

if ("+-=*/!".indexOf(value) != -1) {
    // found
}

Eerie,是吗?