`
guiven
  • 浏览: 27881 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java Final关键字与HashMap

    博客分类:
  • java
阅读更多

 

Why final is not applied for Map ?

Prabhat Ranjan 
Ranch Hand 

Joined: Oct 04, 2006
Posts: 374 
Hi, 

Map hm= new HashMap(); 
hm.put("hash","test"); 

ok 

final Map hm= new HashMap(); 
hm.put("hash","test");// this should not allow here as Map i have declared as final. 

ko 

but Map hms = Collections.unmodifiable(hm) is working fine.
Matthew Brown 
Bartender 

Joined: Apr 06, 2010
Posts: 4115 
    
    4

I like...
Java Netbeans IDE Scala
Prabhat Ranjan wrote:final Map hm= new HashMap(); 
hm.put("hash","test");// this should not allow here as Map i have declared as final. 

But hm is still pointing at the same object. final means that the reference can't be altered, not the object itself.
Paul Sturrock 
Bartender 

Joined: Apr 14, 2004
Posts: 10336 

I like...
Eclipse IDE Hibernate Java

hm.put("hash","test");// this should not allow here as Map i have declared as final. [ 

Final does not imply unmodifiable, unless the object is immutable. If you want an unmodifiable map have a look at the Collections class, or alternatively wrap the map in your own custom immutable class.

 

 

如果要实现HashMap不可被修改,即如果不可变类的成员变量是可变的(譬如HashMap),我们需要使用深拷贝(deep copy)或者克隆来防止成员变量被更改:

    private final HashMap testMap;
 
……
……
……
 
    /**
     * 可变对象的访问方法
     */
    public HashMap getTestMap() {
        //return testMap;
        return (HashMap) testMap.clone();
    }

 

分享到:
评论

相关推荐

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    final关键字特性 Java类和包 抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入...

    Java面试题深入解析:在互联网公司面试程序员需要留意的六个问题.docx

    final关键字的作用是什么?等等。 ## 2. 面向对象编程 Java是一种面向对象的编程语言,因此Java程序员需要掌握面向对象编程的相关知识,包括类、对象、继承、接口、多态等等。在面试中,面试官可能会问及Java中的...

    Java面试题.docx

    30、HashMap与HashSet的区别 31-40题 31、HashSet与HashMap怎么判断集合元素重复? 33、ArrayList和LinkedList的区别,以及应用场景 34、数组和链表的区别 35、开启线程的三种方式? 36、线程和进程的区别? ...

    java基础核心总结归纳---参考手册--心得手册-学习资料-总结经验

    与 Exception 有关的 Java 关键字 19 什么是 Error 20 内部类 20 集合 20 ArrayList 21 Vector 21 LinkedList 21 Stack 21 HashSet 22 TreeSet 22 LinkedHashSet 22 HashMap 23 集合实现类特征图 23 泛形 23 反射 24...

    Java 基础核心总结 +经典算法大全.rar

    与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 ...

    java基础案例与开发详解案例源码全

    9.5 Java语言国际化时间获取与计算238 9.6 Random类和Math类240 9.7 本章习题243 第10章 10.1 异常概述246 10.2 使用try和catch捕获异常..2 50 10.3 使用throw和throws引发异常252 10.4 finally关键字255 10.5 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 ...

    JAVA面试题最全集

    修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被...

    Java基础知识点.html

    跳转控制语句 三元运算符 逻辑运算符 短路逻辑运算符 数组 方法简述 switch语句 if语句 关系运算符 自增自减运算符 赋值运算符 算术运算符 类型转换 Java简述 标识符 变量 数据类型 常量 关键字

    疯狂JAVA讲义

    3.2.3 Java关键字 47 3.3 数据类型分类 48 3.4 基本数据类型 48 3.4.1 整型 49 3.4.2 字符型 49 3.4.3 浮点型 51 3.4.4 布尔型 52 3.5 基本类型的类型转换 53 3.5.1 自动类型转换 53 3.5.2 强制类型转化 54...

    Java面试宝典2020修订版V1.0.1.doc

    9、final关键字的用法? 15 10、静态变量和实例变量的区别? 15 11、面向对象的基本特征是什么? 15 12、作用域public,private,protected,以及不写时的区别? 16 13、Overload和Override的区别。 16 14、构造器可不...

    java7hashmap源码-Interview:面试宝典

    hashmap源码 Interview 一、Java基础 String类为什么是final的。 理解final 修辞类,类不能被继承 修辞方法,方法不能被重写 修辞类变量,变量必须初始化 字符串池String Pool 字符串创建方式 String str = ...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】Java 中的final关键字有哪些用法? 31 【基础】内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制? 31 【基础】I/O总结 31 【基础】Java中如何实现序列化,有什么意义? 34 【WEB】session与...

    Java面试宝典-经典

    10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 11 12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法...

    Java面试宝典2010版

    10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 11 12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法...

    JAVA面试题收录

    文章目录一、JavaSE基础二、JavaWeb部分三、框架部分四、数据库部分五、程序算法六、JVM调优七、Java优化八、Redis相关九、Nginx相关十、...Hashtable与HashMap的区别 线程和进程的区别 实现多线程程序的2种方式 List、

    java面试题大全(2012版)

    10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 11 12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法...

    java面试宝典2012版.pdf

    10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11、"=="和equals方法究竟有什么区别? 12、静态变量和实例变量的区别? 13、是否可以从一个static方法内部发出对非static方法的调用? ...

    java 面试题 总结

    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...

Global site tag (gtag.js) - Google Analytics