如何重写toString方法以在Java中显示列表中的元素?
几个小时以来,我一直在想这个问题,但我找不到一个有效的答案 为了完整起见,我在下面发布了完整的代码。如果我不重写toString方法,我将获得对象的哈希代码的表示形式 我尝试使用以下方法:如何重写toString方法以在Java中显示列表中的元素?,java,Java,几个小时以来,我一直在想这个问题,但我找不到一个有效的答案 为了完整起见,我在下面发布了完整的代码。如果我不重写toString方法,我将获得对象的哈希代码的表示形式 我尝试使用以下方法: public String toString(List<?> list) { String result = " "; for (int i = 0; i < list.size(); i++) { result += " " + list.get(i);
public String toString(List<?> list) {
String result = " ";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
公共字符串到字符串(列表){
字符串结果=”;
对于(int i=0;i
然而,这似乎没有帮助,因为我仍然得到了对hashcode的引用。我理解这是因为我没有正确地重写toString方法;当我包含@Override注释时,我得到了一个错误,但这是我所能得到的
我看了一些其他的答案,这些答案说覆盖toString方法在列表/集合的情况下是没有用的,但是没有为另一种选择提供适当的指导
public class WordsContainer {
Collection<String> wordList = new ArrayList<String>();
public void wordGroup1() {
wordList.add("Ant");
wordList.add("Almond");
/// more words
}
public Collection<String> getRandomWords() {
wordGroup1();
LinkedList<String> wordLinkedList = new LinkedList<String>(wordList);
ArrayList<String> subList = new ArrayList<String>();
int i = 0;
while (i < 6) {
int index = (int) Math.random() * 10;
if (!subList.contains(wordLinkedList.get(index))) {
subList.add(wordLinkedList.get(index));
i++;
}
}
return subList;
}
public String toString(List<?> list) {
String result = " ";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
}
public class wordsContainerTest {
public static void main(String[] args) {
wordsContainer list1 = new wordsContainer();
list1.wordGroup1();
System.out.println(list1);
}
}
公共类单词容器{
Collection wordList=new ArrayList();
public void wordGroup1(){
添加(“Ant”);
添加(“杏仁”);
///更多的话
}
公共集合getRandomWords(){
wordGroup1();
LinkedList wordLinkedList=新的LinkedList(单词列表);
ArrayList子列表=新的ArrayList();
int i=0;
而(i<6){
int index=(int)Math.random()*10;
如果(!subList.contains(wordLinkedList.get(index))){
add(wordLinkedList.get(index));
i++;
}
}
返回子列表;
}
公共字符串toString(列表){
字符串结果=”;
对于(int i=0;i
编辑:
很抱歉,我忘了提及我试图删除覆盖方法中的参数,如下所示:
public String toString() {
LinkedList<String> list = new LinkedList<>()
String result = " ";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
公共字符串toString(){
LinkedList=新建LinkedList()
字符串结果=”;
对于(int i=0;i
}
但是当我运行代码时,控制台没有显示任何内容。我意识到这是因为我实例化了一个空列表,但此时我不知道还能做什么。toString()
没有参数。这样覆盖它(假设您正在扩展列表类):
@覆盖
公共字符串toString(){
字符串结果=”;
对于(int i=0;i
更新01
好的,看起来您真正想要做的是打印由WordsContainer封装的列表的内容
重写WordsContainer的toString,如下所示:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(" "); // remove this if you do not want two spaces at the front of the returned string
for (int i = 0; i < this.wordList.size(); i++) {
sb.append(" " + this.wordList.get(i).toString());
}
return sb.toString();
}
@覆盖
公共字符串toString(){
StringBuilder sb=新的StringBuilder();
sb.append(“”;//如果不希望在返回字符串的前面有两个空格,请删除此项
for(int i=0;i
请注意,您必须将wordList的声明更改为List
类型
更新02
这回答了评论中的后续问题
您可以声明一个静态实用程序方法,该方法构建任意给定字符串列表内容的字符串表示,如下所示:
public static String getStringRepresentation(List<String> list) {
StringBuilder sb = new StringBuilder();
sb.append(" "); // remove this if you do not want two spaces at the front of the returned string
for (int i = 0; i < list.size(); i++) {
sb.append(" " + list.get(i).toString());
}
return sb.toString();
}
公共静态字符串getStringRepresentation(列表){
StringBuilder sb=新的StringBuilder();
sb.append(“”;//如果不希望在返回字符串的前面有两个空格,请删除此项
对于(int i=0;i
并使用这样的方法:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
String listStringRepr = WordsContainer.getStringRepresentation(list);
System.out.println(listStringRepr);
}
publicstaticvoidmain(字符串[]args){
列表=新的ArrayList();
列表。添加(“foo”);
列表。添加(“酒吧”);
String listStringRepr=WordsContainer.getStringRepresentation(列表);
System.out.println(listStringRepr);
}
toString()
没有参数。这样覆盖它(假设您正在扩展列表类):
@覆盖
公共字符串toString(){
字符串结果=”;
对于(int i=0;i
更新01
好的,看起来您真正想要做的是打印由WordsContainer封装的列表的内容
重写WordsContainer的toString,如下所示:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(" "); // remove this if you do not want two spaces at the front of the returned string
for (int i = 0; i < this.wordList.size(); i++) {
sb.append(" " + this.wordList.get(i).toString());
}
return sb.toString();
}
@覆盖
公共字符串toString(){
StringBuilder sb=新的StringBuilder();
sb.append(“”;//如果不希望在返回字符串的前面有两个空格,请删除此项
for(int i=0;i
请注意,您必须将wordList的声明更改为List
类型
更新02
这回答了评论中的后续问题
您可以声明一个静态实用程序方法,该方法构建任意给定字符串列表内容的字符串表示,如下所示:
public static String getStringRepresentation(List<String> list) {
StringBuilder sb = new StringBuilder();
sb.append(" "); // remove this if you do not want two spaces at the front of the returned string
for (int i = 0; i < list.size(); i++) {
sb.append(" " + list.get(i).toString());
}
return sb.toString();
}
公共静态字符串getStringRepresentation(列表){
StringBuilder sb=新的StringBuilder();
sb.append(“”;//如果不希望在返回字符串的前面有两个空格,请删除此项
对于(int i=0;i
并使用这样的方法:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
String listStringRepr = WordsContainer.getStringRepresentation(list);
System.out.println(listStringRepr);
}
publicstaticvoidmain(字符串[]args){
列表=新的ArrayList();
列表。添加(“foo”);
列表。添加(“酒吧”);
String listStringRepr=WordsContainer.get
List<String> wordList = new ArrayList<String>();
public String toString(Collection<?> list) {
String result = " ";
for (Object item : list) {
result += " " + item.toString();
}
return result;
}
public String toString(){
//implmentation
}
import java.util.List;
import java.util.LinkedList;
public class WordList {
List<String> list = new LinkedList<String>();
public static void main(String []args) {
System.out.println(new WordList());
}
@Override
public String toString() {
String result = "";
list.add("Hello");
list.add("World");
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i).toString();//call toString on element of the list
}
return result;
}
}
package listtostringmethod;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class ListToStringMethod {
enter code here
public static void main(String[] args) {
// TODO code application logic here
//List<String> s = Arrays.asList("a","b","c");
//s.toString();
MyList myList = new MyList();
myList.add("a");
myList.add("b");
//myList.toString();
System.out.println(myList.toString());
}
}
class MyList extends ArrayList {
@Override
public String toString (){
StringBuffer retVal = new StringBuffer();
Iterator iterator = this.iterator();
while (iterator.hasNext()){
retVal.append(iterator.next()+",");
}
return retVal.toString();
}
}