gpt4 book ai didi

java - 存储在 ArrayList 中的对象打印出正确的值。 Comparable Interface 是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 05:41:14 25 4
gpt4 key购买 nike

下面我粘贴了整个代码

对于我们读取的 dvdinfo.txt 中的每一行文本,我们正在创建 DVDInfo 类的新实例并将其存储在 ArrayList 中。截至目前,考虑此类不实现任何接口(interface),并且在 main 方法中不使用任何排序方法。因此,在该标准中,当我们打印 dvdList arraylist 时,它会打印出文件中的所有内容,而不进行排序。我的第一个疑问是存储在 ArrayList 中的新实例如何正确打印文本,我们没有使用任何 getter 方法来存储 ArrayList 中的文本。

现在考虑它在 main 中实现可比接口(interface)和 collections.sort() 的整个代码。

The compareTo() method returns an int with the following characteristics:
* negative if thisObject < anotherObject
* zero If thisObject == anotherObject
* positive If thisObject > anotherObject
Wrote in SCJP by Kathy/Bates

在下面的代码中,它实现了 compareTo() 方法。如何从 sort 调用此 compareTo() 以及此 int 值 如何有助于 sort 方法对对象进行排序。当我们只比较 title 对象时它是如何工作的以及排序是如何发生的。 collections.sort(dvdlist) 如何与此 compareTo() 方法一起工作?

DVD信息.txt

Donnie Darko/sci-fi/Gyllenhall, Jake
Raiders of the Lost Ark/action/Ford, Harrison
2001/sci-fi/??
Caddy Shack/comedy/Murray, Bill
Star Wars/sci-fi/Ford, Harrison
Lost in Translation/comedy/Murray, Bill
Patriot Games/action/Ford, Harrison

MyDVD.java

import java.util.*;
import java.io.*;

class DVDInfo implements Comparable<DVDInfo>{
String title;
String genre;
String leadActor;

DVDInfo(String t, String g, String a){
title = t; genre = g; leadActor = a;
}

public String toString(){
return title + " " + genre + " " + leadActor + "\n";
}

public int compareTo(DVDInfo d){
return title.compareTo(d.getTitle());
}

public String getTitle(){
return title;
}

public String getGenre(){
return genre;
}

public String getLeadActor(){
return leadActor;
}

public void setTitle(String t){
title = t;
}

public void setGenre(String g){
genre = g;
}
public void setLeadActor(String l){
leadActor = l;
}


}

public class MyDVD{
public static void main(String[] args){
ArrayList<DVDInfo> dvdList = new ArrayList<DVDInfo>();
populateList(dvdList);

Collections.sort(dvdList);
System.out.println(dvdList);

}

public static void populateList(ArrayList<DVDInfo> dvdList){
try{
File file = new File("dvdinfo.txt");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);

String s;
while ((s = br.readLine()) != null){
String[]tokens = s.split("/");
dvdList.add(new DVDInfo(tokens[0],tokens[1],tokens[2]));
}
br.close();
}catch(IOException e){System.out.println("File doesn\'t exist");}

}

}

输出:

[2001 sci-fi ??
, Caddy Shack comedy Murray, Bill
, Donnie Darko sci-fi Gyllenhall, Jake
, Lost in Translation comedy Murray, Bill
, Patriot Games action Ford, Harrison
, Raiders of the Lost Ark action Ford, Harrison
, Star Wars sci-fi Ford, Harrison
]

最佳答案

打印

它使用 toString() 方法打印每个 DVDInfo 对象。

println 方法将对其参数执行 String.valueOf()。然后 println 代码将打印结果字符串。

您传递给 println 的参数是一个 List,它有一个 toString() 方法,它可以插入方括号和逗号,并且在元素上调用 toString(),将结果放在两者之间。这将生成一个以 [ 开头并以 ] 结尾的字符串。在这些大括号内是对 DVDInfo 对象和逗号调用 toString() 方法的结果。

这就是它的打印方式。

排序

集合sort() 方法知道如何遍历集合并比较元素以将它们排序。它使用标准排序算法来做到这一点。但是您不需要知道算法,只需要知道它进行排序即可。这就是封装的本质。类应该做一件事,让其他类做他们的一件事,一切都会更好。

在排序算法内部,它调用 compareTo 然后执行 if 语句来重新排序两个元素以便较低的元素在前或保留这两个元素以便较低的元素一个是第一。这取决于它们在排序之前是否有序。平等可以走任何一条路——移动或不移动。但是排序算法可以决定。

注意事项

您可能会发现下载 Oracle Java 库的源代码并将您的 IDE 连接到源代码很有趣,这样您就可以单击(或其他任何方式)并查看各种标准库函数的源代码,例如 println排序。它有时太乏味但有时很有趣。

关于java - 存储在 ArrayList 中的对象打印出正确的值。 Comparable Interface 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17495082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com