Collections.singleton()方法不能作为文档?

Qua*_*yen 1 java collections singleton-methods

我已经测试了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
Run Code Online (Sandbox Code Playgroud)

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

谁能解释一下为什么?非常感谢 !!

man*_*uti 5

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

如果你使用泛型,这将更加明显:

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

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

List list = Collections.singletonList(arraylist);
list.add(new ArrayList());
Run Code Online (Sandbox Code Playgroud)

那么这会在运行时抛出异常.

  • @QuanNguyen注意到自2004年以来存在泛型,你还没有使用它们.如果您使用它们会对您有所帮助:`List <String> list = new ArrayList <String>(); List <List <String >> singleton = Collections.singletonList(list);`看看现在如何理解每个列表包含的内容. (2认同)