if (value.compareTo(elementData[size]) >= 0) {
    elementData[size + 1] = value;
    size++;
} else if (value.compareTo(elementData[0]) <= 0) {
    for (int i = size; i >= 0; i--) {
        elementData[i + 1]= elementData[i];
    }

    elementData[0] = value;
    size++;
}


第一个if语句应从compareTo返回正数。我已经调试并确认它确实返回正数,但是它没有进入代码块。

我正在比较喜欢这些“ str1”,“ str2” ...等的字符串。在到达“ str10”并将其与“ str9”进行比较之前,它可以正常工作。有人说“ str10”小于“ str9”,这有意义吗?

它每10次迭代发生一次。所以我的数组看起来像[str0,str1,str10 ... str19,str2,str20,str21,... str29..etc]

最佳答案

考虑使用compareTo(String anotherString)时如何比较string值。


  按字典顺序比较两个字符串。比较是基于
  字符串中每个字符的Unicode值。字符序列
  将此字典对象表示的内容按字典顺序与
  参数字符串表示的字符序列。结果是
  如果此String对象在字典上位于之前,则为负整数
  参数字符串。如果此String,则结果为正整数
  对象在字典上跟随自变量字符串。结果是
  如果字符串相等,则为零;否则为零。当
  equals(Object)方法将返回true。


如您所见,将"str10""str9"比较时,'1'"str10"的Unicode值小于'9'"str9"的Unicode值,这就是为什么结果"str10"不大于"str9"

您可以考虑选择Alphanum算法。

07-26 08:15