我想知道是否有办法使用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循环。
答案 0 :(得分:1)
如果要在搜索处理期间跳过某些数据,则必须满足两个条件。
您可以通过对数组进行排序然后从中间进行比较来改进搜索。 然后在每个步骤中,您将减少必须比较一半的元素。
您可以使用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'