Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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 Collections.unmodifiablemap()和读取也会修改的集合_Java_Collections - Fatal编程技术网

Java Collections.unmodifiablemap()和读取也会修改的集合

Java Collections.unmodifiablemap()和读取也会修改的集合,java,collections,Java,Collections,这更像是一个好奇的问题。假设我为Collections.unmodifiableMap()提供了一个访问顺序设置为true的LinkedHashMap。因为读取实际上是在修改映射。这是否意味着在某些情况下,unmodifiableMap()返回的视图实际上是可修改的 公共类MyApp{ /** *@param args */ 公共静态void main(字符串[]args){ Map m=新LinkedHashMap(16.75f,真); 集合。不可修改地图(m); } } 地图正在自

这更像是一个好奇的问题。假设我为Collections.unmodifiableMap()提供了一个访问顺序设置为true的LinkedHashMap。因为读取实际上是在修改映射。这是否意味着在某些情况下,unmodifiableMap()返回的视图实际上是可修改的

公共类MyApp{
/**
*@param args
*/    
公共静态void main(字符串[]args){
Map m=新LinkedHashMap(16.75f,真);
集合。不可修改地图(m);
}
}


地图正在自我修改
Collections.unmodifiableMap()
仅为不允许修改的映射提供装饰程序,它不会使映射本身不可修改。

Collections.unmodifiableMap
返回一个新映射,当您尝试修改它时,它会抛出异常,使用您作为备份集合传入的现有映射。它不会改变现有映射的语义。

HashMap和LinkedHashMap的底层容量始终为2的幂。将其设置为15与使用默认值16相同。将负载因子从默认值0.7更改为0.75不太可能有多大区别。我只提供了psuedo随机值。虽然我很确定默认初始容量是16,负载系数是.75。虽然这些都与我的问题无关,但你的负载系数是正确的当然可以,但该装饰器的一部分仍然允许修改映射的get()操作。get()和put()并没有什么特别之处,可以确保其中一个修改或不修改映射。我想我要说的是,不可修改的函数依赖于这样一种假设,即put()修改映射,get()不修改t@nsfyn55:好的,如果说装饰器不允许调用根据
Map
接口更改
Map
的方法,那么从技术上讲,这将更为正确。
Map
界面没有说明顺序,因此
LinkedHashMap
不被认为是根据它进行“修改”的。
public class MyApp {

   /**
   * @param args
   */    
   public static void main(String[] args)    {
     Map<String, String> m = new LinkedHashMap<String,
      String>(16,.75f,true);
      Collections.unmodifiableMap(m);    

    }