我们很容易想到用final关键字进行修饰,我们都知道final关键字可以修饰类,方法,成员变量,final修饰的类不能被继承,final修饰的方法不能被重写,final修饰的成员变量必须初始化值,如果这个成员变量是基本数据类型,表示这个变量的值是不可改变的,如果说这个成员变量是引用类型,则表示这个引用的地址值是不能改变的,但是这个引用所指向的对象里面的内容还是可以改变的。

那么,我们怎么确保一个集合不能被修改?首先我们要清楚,集合(map,set,list…)都是引用类型,所以我们如果用final修饰的话,集合里面的内容还是可以修改的。

下面提供一个例子:

可以看到:我们用final关键字定义了一个map集合,这时候我们往集合里面传值,第一个键值对1,“1”;我们再修改后,可以把键为1的值改为 "3",说明我们是可以修改map集合的值的。

那我们应该怎么做才能确保集合不被修改呢?
我们可以采用Collections包下的unmodifiableMap方法,通过这个方法返回的map,是不可以修改的。他会报 java.lang.UnsupportedOperationException错。

Collections.unmodifiableMap();

报错:java.lang.UnsupportedOperationException错

同理:Collections包也提供了对list和set集合的方法。
Collections.unmodifiableList()

例子:使用了Collections.unmodifiableList() 保证集合不可以修改

Collections.unmodifiableSet() 保证set集合不被修改

怎么确保一个集合不能被修改?相关推荐

  1. java list 拆分_Java面试题怎么确保一个集合不能被修改?

    点击上方"千锋Java学院",选择"置顶公众号" 每天一道面试模拟真题及解析 课前导读 ●回复"每日一练"获取以前的题目,持续更新! ●我希 ...

  2. 怎么确保一个集合不能被修改

    集合(map,set,list)都是引用类型,所以我们如果用final修饰的话,集合里面的内容还是可以修改的. 可以使用 Collections. unmodifiableCollection(Col ...

  3. Java中如何循环删除一个集合(如List)中的多个元素

    今天我需要从一个java的集合中,根据另一个集合的内容,删除第一个集合中不特定的元素.这看上去非常简单,但却遇到了问题.这就是"Java中如何删除一个集合中的多个元素"的问题. 这 ...

  4. C++实现输出一个集合的全部子集

    在学习C++时遇到的一个问题:用递归实现一个集合全部子集的输出. 一开始感觉好难,虽然个数和思路很好想,有n个元素,就有2n个子集,0表示没有,1表示有. 但是如何用递归代码实现呢? 思路:类似于二进 ...

  5. 什么是集合,集合的定义,集合与数组的区别,怎么创建一个集合?

    一:什么是集合? 1.集合类存放于java.util包中. 2.集合类型主要有3种:set(集).list(列表)和map(映射). 3.集合存放的都是对象的引用,而非对象本身.所以我们称集合中的对象 ...

  6. python创建一个集合类型的方法是_【Python基础】一文理解Python集合,17个方法全解,看完就够了...

    一.集合的定义 01 定义与特性 Python中的集合类似于数学中的集合概念,它是一组无序.不可重复元素序列,集合用{value1,value2}创建,某种程度上可以把集合看作是没有值的字典.字典是d ...

  7. 怎样实现两个线程共享一个集合_面试高频考察点:几种线程安全的Map解析

    Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的. 看下面两个场景: 1.当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全不 ...

  8. 【Groovy】集合遍历 ( 操作符重载 | 集合中的 “ << “ 操作符重载 | 使用集合中的 “ << “ 操作符添加一个元素 | 使用集合中的 “ << “ 操作符添加一个集合 )

    文章目录 一.集合中的 " << " 操作符重载 1.使用集合中的 " << " 操作符添加一个元素 2.使用集合中的 " & ...

  9. 有3个集合, 从其中一个集合中删除同时存在于另外两个集合的元素

    如下分享的邮件,在博客园做个记录,以便以后使用. 在这里,其实也想倡导一下程序员要具有的分享精神.鼓励大家多分享,平时有什么新的收获,最好在team里做个分享 .分享也是一种很好的事情.对团队来说,可 ...

最新文章

  1. python模拟浏览器模块,python模块学习---mechanize(模拟浏览器)
  2. 台湾大学林轩田机器学习基石课程学习笔记11 -- Linear Models for Classification
  3. go中使用type关键字来定义类型别名
  4. 打CALL APP 项目进展 总体计划
  5. 她被“誉为”中科院最美女院士,52岁依然貌美如花?气质不输女星
  6. git推送tag到远端服务器
  7. 关于智能家居的四大思维误区 并非你想的那样
  8. python抓取微信公众号文章_如何使用python3抓取微信公众号文章,了解一下?
  9. matlab画图(plot)命令。长期更新!
  10. ubuntu 下星际译王词典下载地址
  11. windows主机测评
  12. HTML基础介绍和基础骨架
  13. ajax、promise、react、缓存笔记记录
  14. Introduce·艺术学核心期刊推荐之《文艺争鸣》
  15. 工厂模式(简单工厂,工厂方法,抽象工厂)
  16. 为什么说易语言不如c语言_不说语言? 如何使用Google翻译
  17. YYDS《剑指Offer》再续新篇,百万程序员人手一册
  18. Nginx 代理本地文件
  19. 赛扬处理器_【硬件资讯】Intel 10代酷睿 桌面处理器正式发布
  20. ffmpeg源码简析(六)编码-av_write_frame(),av_write_trailer()

热门文章

  1. zoj 3511 Cake Robbery(线段树)
  2. 20. C# -- Base, this 关键字
  3. Java 全半角转换
  4. iOS开发缓存机制之—内存缓存机制
  5. opencv中的一些陷阱 坑死我了~~~~(_)~~~~
  6. 【图像处理】——灰度变换心得(cv2.normalize规范化值0-255,cv2.convertScaleAbs(new_img)转为8位图)
  7. 人工智能数学基础知识
  8. 把windows装到linux下,如何将WSL(Windows Subsystem for Linux 2)安装到Windows 10?
  9. matlab做比例积分微分控制,收放卷卷径计算+闭环摆杆控制参数自适应PID控制算法(变比例变积分变微分)介绍...
  10. kotlin为什么比java编译慢_为什么Kotlin编译速度比Scala快? [关闭]