Java compareTo()方法如何在代码中使用listIterator?

Java compareTo()方法如何在代码中使用listIterator?,java,Java,由于与listIterator一起使用的compareTo()方法,我无法从下面的AddInNorder()方法中理解while循环。我将在下面发布代码和我不理解的部分 公共类演示{ 公共静态void main(字符串[]args){ LinkedList placestovist=新建LinkedList(); placesToVisit.add(“悉尼”); placesToVisit.add(“墨尔本”); placesToVisit.add(“布里斯班”); placesToVisit.

由于与listIterator一起使用的compareTo()方法,我无法从下面的AddInNorder()方法中理解while循环。我将在下面发布代码和我不理解的部分

公共类演示{
公共静态void main(字符串[]args){
LinkedList placestovist=新建LinkedList();
placesToVisit.add(“悉尼”);
placesToVisit.add(“墨尔本”);
placesToVisit.add(“布里斯班”);
placesToVisit.add(“珀斯”);
placesToVisit.add(“堪培拉”);
placesToVisit.add(“阿德莱德”);
placesToVisit.add(“达尔文”);
打印列表(placesToVisit);
私有静态无效打印列表(LinkedList LinkedList){
迭代器i=linkedList.Iterator();
while(i.hasNext()){
System.out.println(“正在访问”+i.next());
}
System.out.println(“==============================================”);
}
私有静态布尔加法器(LinkedList LinkedList,字符串newCity){
ListIterator stringListIterator=linkedList.ListIterator();
while(stringListIterator.hasNext()){
int comparison=stringListIterator.next().Comparieto(newCity);
如果(比较==0){//equal,则不要添加
System.out.println(newCity+“已包含为目标”);
返回false;
}否则,如果(比较>0){//新城市应该出现在此之前
stringListIterator.previous();
stringListIterator.add(newCity);
返回true;
}否则如果(比较<0){
//继续下一个城市
}
}
stringListIterator.add(newCity);//如果作为参数传递的linkedList为空,则添加城市。
返回true;
}
因此,谈到addInOrder方法,我理解通过声明ListIterator stringListIterator=linkedList.ListIterator();,迭代器的光标将位于链接列表的第一个元素之前,下面的示例是Sydney

假设添加到链表中的城市顺序是main方法中使用的顺序:悉尼、墨尔本、布里斯班、珀斯、堪培拉、阿德莱德和达尔文

现在,关于while循环:行int comparison=stringListIterator.next().comparieto(newCity);将光标移动到第一个元素(Sydney)之后,它会将Sydney与newCity参数进行比较。假设我要传递的newCity参数是Adelaide。它会将Sydney与Adelaide进行比较,比较后结果为18,因为Sydney“大于”阿德莱德,因此如果(比较>0)
条件,它将进入else

通过声明:stringListIterator.previous();光标将回到初始位置,我的意思是在第一个元素Sydney之前。第二行,stringListIterator.add(newCity);将添加Adelaide,作为linkedList的第一个元素,Sydney在后面

我的问题是:因为这是一个while循环,它将重新执行代码,但问题来了:再次访问int comparison=stringListIterator.next().comparieto(newCity);,光标将位于何处?它将从悉尼和墨尔本之间移动到墨尔本和布里斯班之间?如果是,则将墨尔本与newCity参数(阿德莱德,如上文所述引入)进行比较将得到12,因为墨尔本“大于”阿德莱德,这将再次检查条件,否则如果(比较>0),它将输入它,因此,stringListIterator.previous();现在将光标移动到悉尼和墨尔本之间,再次添加阿德莱德(就像第一次比较一样)??我知道我的逻辑中缺少一些东西,因为代码实际上按字母顺序排列所有城市(这就是代码的目的),但是我哪里会出错呢???请帮助我,提前谢谢

int comparison = stringListIterator.next().compareTo(newCity);
您的困惑部分是因为这行代码做了太多的事情。要了解它在做什么,请将其分为两行:

String city = stringListIterator.next();
int comparison = city.compareTo(newCity);
现在,您还可以添加输出以查看发生了什么:

String city = stringListIterator.next();
System.out.println("city: " + city);
int comparison = city.compareTo(newCity);

您是正确的;直到您写下“通过再次到达
int comparison=stringListIterator.next().comparieto(newCity);
”(重点添加)

如果您研究
否则如果
请注意有一个
返回true
。这意味着您不会再次到达while

。。。
}否则,如果(比较>0){//新城市应该出现在此之前
stringListIterator.previous();
stringListIterator.add(newCity);
返回true;
}否则{…}

格式化技巧:使用代码周围的反勾号将其格式化为固定宽度的字体。
int x;
非常感谢您的回复!这对我帮助很大。我太傻了,没有意识到返回到那里,循环实际上会结束。再次感谢!非常感谢您的帮助!我现在终于明白了h您的帮助和almac777的帮助。