Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接受集合的ArrayList构造函数_Java_List_Collections - Fatal编程技术网

Java 接受集合的ArrayList构造函数

Java 接受集合的ArrayList构造函数,java,list,collections,Java,List,Collections,我有一个简单的问题 假设我们有一张地图,例如地图 我想要一个方法,返回映射内所有值的列表 我使用的方法如下: return new ArrayList(myMap.values()); 我创建了一个列表myList=newarraylist; 从映射的值集中获取迭代器。 对于迭代器中的每个元素,我在myList列表中放置了一个引用。 返回列表 …稍后,对于我使用的每个元素,我将其包装在同步块中,因为列表包含引用。 现在我正在考虑使用更简单的方法。我的意思是: return new ArrayL

我有一个简单的问题

假设我们有一张地图,例如地图

我想要一个方法,返回映射内所有值的列表

我使用的方法如下:

return new ArrayList(myMap.values());
我创建了一个列表myList=newarraylist; 从映射的值集中获取迭代器。 对于迭代器中的每个元素,我在myList列表中放置了一个引用。 返回列表 …稍后,对于我使用的每个元素,我将其包装在同步块中,因为列表包含引用。 现在我正在考虑使用更简单的方法。我的意思是:

return new ArrayList(myMap.values());
正如您在本例中看到的,我只是使用接受集合的列表接口的构造函数

最后,我的问题是:


如果我使用第二种方法,我是否仍然获得引用或它复制了地图中的值对象?

在这两种情况下,您都将获得collecion的浅拷贝,因此,两个数组都将保留对相同对象的引用。

返回新的ArrayListmMap。values将返回包含映射原始值引用的ArrayList。不会创建值实例的副本


请注意,如果地图包含重复的值,即彼此相等的值,则ArrayList也将包含重复的值。若要消除重复项,应该创建一组值,而不是列表。

在这两种情况下,您都将获得引用的副本,即所谓的浅层副本

不存在深度复制,即创建一个具有有意义的等效字段的全新对象-也涉及深度复制