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也将包含重复的值。若要消除重复项,应该创建一组值,而不是列表。在这两种情况下,您都将获得引用的副本,即所谓的浅层副本 不存在深度复制,即创建一个具有有意义的等效字段的全新对象-也涉及深度复制