介紹
在Java開發中,我們常常需要將一個List對象中的元素轉成字元串進行顯示或者存儲等操作。而List類中提供了一個toString方法,用於將List對象轉成字元串形式返回。但是,這個方法的實現方式可能會讓我們產生一些疑惑。在本文中,我們將會從多個方面詳細闡述如何正確地使用List.toString方法。
正文
一、List.toString方法的實現原理
public String toString() { Iterator<E> i = iterator(); if (! i.hasNext()) return "[]"; StringBuilder sb = new StringBuilder(); sb.append('['); for (;;) { E e = i.next(); sb.append(e == this ? "(this Collection)" : e); if (! i.hasNext()) return sb.append(']').toString(); sb.append(',').append(' '); } }
List.toString方法的實現原理是通過遍歷List中的元素,依次將元素放入一個StringBuilder對象中,並在中間添加逗號和空格,最終將整個StringBuilder對象轉成字元串形式返回。需要注意的是,如果List對象中的元素是Collection類型,List.toString方法會把該元素表示為”(this Collection)”,這個結果可能導致一些誤解。
二、使用List.toString方法需要注意的點
1. List對象為空的情況
當List對象為空時,List.toString方法返回的字元串為”[]”,也就是一個空集合。這個結果可能是我們所期望的,但是在一些情況下,例如在日誌輸出中,我們可能需要更直觀的提示。因此,建議在使用List.toString方法之前先進行判空操作,以避免這個問題。
2. List對象中元素的類型
List對象中的元素可以為任意類型,但是如果元素的類型為自定義類型,則要確保該類型正確地實現了toString方法。否則,List.toString方法會輸出該元素的內存地址而不是元素的具體值。
public class Person { private String name; private int age; // constructor, getter/setter methods... public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } } List<Person> list = new ArrayList<>(); list.add(new Person("Tom", 20)); list.add(new Person("Jerry", 22)); System.out.println(list.toString()); // 輸出:[Person{name='Tom', age=20}, Person{name='Jerry', age=22}]
3. List對象中含有Collection類型的元素
如果List對象中含有Collection類型的元素,那麼List.toString方法會將該元素表示為”(this Collection)”。這個結果可能會讓我們產生一些疑惑。因此,在使用List.toString方法時,要注意判斷List對象中是否含有Collection類型的元素,並且對含有Collection類型元素的情況進行單獨處理。
List<List<Integer>> list = new ArrayList<>(); list.add(Arrays.asList(1, 2)); list.add(Arrays.asList(3, 4)); System.out.println(list.toString()); // 輸出:[[1, 2], [3, 4]] Map<String, List<Integer>> map = new HashMap<>(); map.put("list1", Arrays.asList(1, 2)); map.put("list2", Arrays.asList(3, 4)); System.out.println(map.toString()); // 輸出:{list1=[1, 2], list2=[3, 4]}
4. List對象中含有Null元素
如果List對象中含有Null元素,List.toString方法會將該元素表示為”null”。這個結果可能會讓我們產生一些誤解。因此,在使用List.toString方法時,要注意判斷List對象中是否含有Null元素,並且對含有Null元素的情況進行單獨處理。
List<String> list = new ArrayList<>(); list.add("Tom"); list.add(null); System.out.println(list.toString()); // 輸出:[Tom, null]
三、自定義List.toString方法
由於List.toString方法的輸出結果可能會讓我們產生一些疑惑,因此,在一些情況下,我們需要自定義List.toString方法,以適應我們的需求。自定義List.toString方法的原理也很簡單,即通過遍歷List中的元素,依次將元素轉成字元串形式拼接起來,並加上適當的符號。
public class CustomList<E> extends ArrayList<E> { public String toString() { if (isEmpty()) { return "[]"; } StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < size(); i++) { E e = get(i); if (e == this) { sb.append("(this Collection)"); } else if (e == null) { sb.append("null"); } else { sb.append(e.toString()); } if (i != size() - 1) { sb.append(", "); } } sb.append("]"); return sb.toString(); } } List<String> list = new CustomList<>(); list.add("Tom"); list.add("Jerry"); System.out.println(list.toString()); // 輸出:[Tom, Jerry]
結論
List.toString方法是一個非常常用的方法,但是在使用過程中還是需要注意到它的一些細節,以免產生誤解。在一些情況下,我們還需要自定義List.toString方法以適應我們的需求。
原創文章,作者:NYHP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/140045.html