有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有一种方法可以对数据集使用compareTo()方法,而不必遍历数据集的每个元素?

我想知道是否有一种方法可以使用compareTo(),而不必遍历数据集中的每个字符串元素,我很确定这在使用数组时是不可能的,但是是否有一种数据结构能够以这种方式工作

请参见下面的示例以获得更清晰的解释:

public static int PronounDetector(String [] pronouns)
{
    String [] you = {"you", "You"};             
    for (int i = 0; i < pronouns.length; i++)   
    {
        if (pronouns[i].compareTo(you) == 0)
        //Is there a way for compareTo to run through 
        //the entire String data set without having to make 
        //it iterate through each element using a for loop?
        {
            return 2;
        }
    }
}

编辑:我知道无论程序在数据集中迭代什么,(否则它将如何找到匹配项?),我只是想看看是否有一种方法可以做到这一点,而不必在for循环中实际使用物理类型


共 (2) 个答案

  1. # 1 楼答案

    是的,您不必“双重迭代”(即使这正是在后台发生的事情),您可以将数组you转换为字符串,并使用contains()进行搜索:

        String youStr = Arrays.deepToString(you);
        System.out.println(youStr.contains(pronouns[0])); // prints 'true'
    
  2. # 2 楼答案

    如果要在搜索处理过程中跳过某些数据,则必须满足两个条件

    1. 数据必须是相关的
    2. 数据必须组织起来

    通过对数组进行排序,然后从中间进行比较,可以改进搜索。 然后,在每一步中,你们将把必须比较的元素减少一半

    可以使用TreeMap来代替数组,它将数据存储在树结构中以获得相同的结果

    代码示例:

    public static boolean contains(String[] array, String key) {
    
            Objects.requireNonNull(array,"The array must not be null");
            Objects.requireNonNull(array,"The key must not be null");
    
            String[] copy = array.clone();
            Arrays.sort(copy);
    
            return Arrays.binarySearch(copy, key) != -1;
        }