有没有办法对数据集使用compareTo()方法,而不迭代集合中的每个元素?

时间:2014-08-09 06:25:00

标签: java data-structures

我想知道是否有办法使用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 个答案:

答案 0 :(得分:1)

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

  1. 数据必须相关。
  2. 必须整理数据。
  3. 您可以通过对数组进行排序然后从中间进行比较来改进搜索。 然后在每个步骤中,您将减少必须比较一半的元素。

    您可以使用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;
        }
    

答案 1 :(得分:0)

是的,您不必“双重迭代”(即使这正是引擎盖下发生的事情)您可以将数组you转换为字符串并使用contains()进行搜索:< / p>

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