1

我已经测试了 Collections.singleton() 方法,如何工作,但我发现它不像文档所说的那样工作?

List arraylist= new ArrayList();
arraylist.add("Nguyen");
arraylist.add("Van");
arraylist.add("Jone");
List list = Collections.singletonList(arraylist);// contains three elements
System.out.println(list.size());// right

正如文档所说,方法调用返回一个仅包含指定对象的不可变列表,单例列表仅包含一个元素,而单例 HashMap 仅包含一个键。单例对象是不可变的(不能修改以添加更多元素),但是当我在代码中看到的内容包含三个元素(“Nguyen”、“Van”、“Jone”)时。

任何人都可以为我解释为什么?非常感谢 !!

4

1 回答 1

5

返回的List是s 的一个。在这种情况下,返回的列表列表本身是不可变的,而不是包含的. 同样,返回的列表只包含一个元素,而不是三个:变量本身被认为是一个元素,并且是唯一存储在由返回的列表中的元素。换句话说,该语句不会创建包含所提供列表的所有元素的列表。ListListListarraylistCollections.singletonListCollections.singletonList(arraylist)

如果你使用泛型会更明显:

List<String> arraylist= new ArrayList<>();
arraylist.add("Nguyen");
arraylist.add("Van");
arraylist.add("Jone");
List<List<String>> list = Collections.singletonList(arraylist);

文档说的是,如果您执行以下操作:

List list = Collections.singletonList(arraylist);
list.add(new ArrayList());

那么这将在运行时引发异常。

于 2015-08-16T07:35:07.647 回答