Java 如何通过特定键查找数组中的最后一个元素

Java 如何通过特定键查找数组中的最后一个元素,java,arrays,find,key,Java,Arrays,Find,Key,我必须通过一个特定的键(使用二进制搜索方法)找到第一个和最后一个元素。我已经完成了searchFirst方法,但无法完成searchLast方法。有时有效有时无效(这取决于我寻找的价值),这就是问题所在 我有一个数据类,其中包含一些属性,如时间戳、名称、产品等,我从文本文件中读取这些属性。当我填充完数据数组后,我用合并排序对数组进行排序 然后我需要数组的第一个和最后一个元素的特定名称 searchFirst方法工作得很好,但searchLast不能满足我的需要 下面是searchLast方法的代

我必须通过一个特定的键(使用二进制搜索方法)找到第一个和最后一个元素。我已经完成了searchFirst方法,但无法完成searchLast方法。有时有效有时无效(这取决于我寻找的价值),这就是问题所在

我有一个数据类,其中包含一些属性,如时间戳、名称、产品等,我从文本文件中读取这些属性。当我填充完数据数组后,我用合并排序对数组进行排序

然后我需要数组的第一个和最后一个元素的特定名称

searchFirst方法工作得很好,但searchLast不能满足我的需要

下面是searchLast方法的代码(n是他应该查找的值,w目前没有使用)

public static int searchLast(数据[]数组,字符串n,字符串w){
int左=0;
int right=array.length-1;
int m=-1;
while(左<右){
m=(左+右)/2;
if(数组[m].getName().compareTo(n)>0){
右=m-1;
}否则{
左=m+1;
}
}
如果(m>=0){
if(数组[right].getName().equals(n)){
返还权;
}
}
返回NO_键;
}
我找不到窃听器也许你能帮我。。。有时代码会找到最后一个,有时它不会…

公共静态int searchLast(数据[]数组,字符串n,字符串w){
public static int searchLast(Data[] array, String n, String w) {
        int left = 0;
        int right = array.length - 1;
        int m = -1;
        int found = -1;

            while (left < right) {
                m = (left + right) / 2;
                if (array[m].getName().compareTo(n) > 0) {
                    right = m - 1;
                } else if (array[m].getName().compareTo(n) < 0){
                    left = m + 1;
                } else {
                    found = m;
                    left = m + 1;
            }

        return found;
    }
int左=0; int right=array.length-1; int m=-1; int-found=-1; while(左<右){ m=(左+右)/2; if(数组[m].getName().compareTo(n)>0){ 右=m-1; }else if(数组[m].getName().compareTo(n)<0){ 左=m+1; }否则{ 发现=m; 左=m+1; } 发现退货; }
你能给我们举一个输入不起作用的例子吗?我不知道我是否可以发布输入数组,但getName返回一个类似“GXA:name”的字符串;x是一个数字,例如,我在寻找一个类似“G13A:Shuffle”的字符串.这些信息够了吗?-我想这就像我在整数数组中按特定数字查找最后一个元素一样。
searchFirst
searchLast
让我想到列表中可能有不止一个重复的值。二进制搜索不会处理这种情况。一旦找到它,它就完成了。它有没有要进行二进制搜索吗?是的,有超过1个同名的vlaue。firstSearch使用二进制搜索,每次都能找到正确的vlaue,因此效果很好…我不能使用二进制搜索最后一个O.O吗?看起来很好,谢谢,但它不起作用…第一个搜索值预期为15,第二个搜索值预期为69,第三个搜索值预期为6885是84,以此类推。你的代码工作了6次中的2次…如果失败了,它会以-1的错误失败…while(leftpublic static int searchLast(Data[] array, String n, String w) { int left = 0; int right = array.length - 1; int m = -1; int found = -1; while (left < right) { m = (left + right) / 2; if (array[m].getName().compareTo(n) > 0) { right = m - 1; } else if (array[m].getName().compareTo(n) < 0){ left = m + 1; } else { found = m; left = m + 1; } return found; }