如何返回常量集合

Kar*_*shy 3 java

java中是否有一种方法可以返回对类集合的引用,我无法更改它或更改其元素的数据?

所以如果我有一张地图,Map<Integer, Set<String>>没有人可以引用设定值并添加元素吗?

Ósc*_*pez 8

以保证所有对象的唯一方法里面一个Map不能被修改,即使Map本身是不可修改的,将是使对象本身不变.

unmodifiableMap()方法保证Map不能修改,但它根本不保证它包含的对象.看看这个就知道如何使对象不可变.有关具体示例,请查看String类的工作原理:您无法修改字符串中的字符,并且所有可以更改字符串的方法(例如toUpperCase():)都会返回一个字符串.这就是你想要的内容中的对象的行为Map.

假定问题中的映射包含Set<String>其值,那么将它们添加到映射之前使用Collections.unmodifiableSet()集将使它们不可变,因为如上所述,它已经是不可变的.String


Jon*_*oni 7

您可以使用它Collections.unmodifiableMap来获取无法修改的地图视图.

每种类型的集合都有不同的方法:

  • unmodifiableCollection 返回泛型Collection的不可修改视图
  • unmodifiableSet 返回Set的不可修改的视图
  • unmodifiableList 返回List的不可修改的视图
  • unmodifiableSortedSet 返回SortedSet的不可修改的视图
  • unmodifiableSortedMap 返回SortedMap的不可修改的视图

如果这些项本身就是集合,那么您可以编写一个递归方法来构造一个新集合,该集合包含原始项目的不可修改的视图.

一般来说,如果您存储在一个集合中的项目本身可以被修改,那么没有什么可以阻止您这样做,而不是制作防御性副本.