`
llk102b
  • 浏览: 3761 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

动态添加删除Map的一些测试

 
阅读更多


      对于Map的处理和运用场景中,会很经常将其作为缓存空间,暂时存放一些需要很快处理的临时数据.

因为Map的使用可以通过key,直接取到Value,非常方便.但有一点,Map的遍历需要Iterator才能实现,这就给

动态(同时)添加,删除和遍历Map带来了问题.

     因为在遍历Map的时候,iterator是在遍历前取出的,若,在遍历过程中,Map已经进行了新的删除操作,iterator将找不到对应指针.这就需要在遍历过程中对map进行同步操作.另外,在遍历过程中如果对Map进行删除操作需要使用iterator的删除,而不简单的map.remove(key).

public class Test { 
    static Map cur_map = new HashMap(); 
    static List time_list = new ArrayList(); 

    public static void main(String[] arags) throws InterruptedException { 
        //add 
        new Thread(new Runnable() { 
            public void run() { 
                for (int i = 0; i cur_map) {//注意同步对象 
                        Iterator it = cur_map.keySet().iterator(); 
                        while (it.hasNext()) { 
                            int key = Integer.parseInt(it.next().toString()); 
                            System.out.println("remove:" + key); 
                            it.remove();//需要使用这个方法来删除 
                                //remove(key); 
                        } 
                    } 
                    try { 
                        Thread.sleep(1000); 
                    } catch (InterruptedException e) { 
                         e.printStackTrace(); 
                    } 
                } 

            } 
        }).start(); 

    } 

    public static void add(String k, String v) { 
        synchronized (cur_map) {//注意同步对象 
            System.out.println("add:" + k); 
            cur_map.put(k, v); 
            long last = System.currentTimeMillis() + 2000; 
            time_list.add(k + "@" + last); 
        } 
    } 

    public static String remove(String k) { 
        synchronized (cur_map) { 
            return cur_map.remove(k); 
        } 

    } 
} 

 
注意:需要对同一对象进行同步,,使用it.remove();

 

分享到:
评论

相关推荐

    js模拟list和map

    javascript 模拟 java中的 List,Map js文件为 js/utils.js IE6.0 测试通过 <br>List: add(var obj) //添加一个元素 remove(var index) //删除一个元素 get(var index) //获取一个元素 remove...

    MyBatis Plus学习项目-idea

    4.3 实体类中添加逻辑删除属性 4.4 测试 条件构造器和常用接口 1、wapper介绍 2、QueryWrapper(查询和删除) 2.1、组装查询条件 2.2、组装排序条件 2.3、组装删除条件 2.4、条件的优先级 2.5、组装select子句 2.6、...

    实验05 Java集合.doc

    主方法中作如下测试: 1)创建一个可放置Person类对象的HashSet; 2)依次添加上述5个对象到HashSet中; 3)把集合中的元素打印出来(使用迭代器Iterator) 2、编写程序练习List集合的基本使用: 1) 创建一个只能...

    sublime-codemap:CodeMap-一个ST3插件,用于显示表示活动viewdocument的代码结构的代码树

    添加存储库: https://github.com/oleg-shilo/sublime-codemap.git : https://github.com/oleg-shilo/sublime-codemap.git 使用Package Control安装sublime-codemap 。 如果需要,请重新启动Sublime编辑器 您还...

    用于创建可以导出为 HTML 或 SVG 的 图像映射 的 javascript工具_代码_下载

    勾选的已经实现 了,其他的都是我以后打算添加的。 在画布上拖放 照片 一个.map.json保存文件 通过滚动放大和缩小 中心点击平移 通过右键单击具有以下选项的区域来显示菜单: 设置网址 设置标题 删除 前进 向后移动...

    暗夜 WEB IM 20110326(数据库字段有详细说明)

    3、只有暗夜管理帐号10000可以添加暗夜应用、设置相对年数、删除系统信息,其他帐号只能添加一般应用,测试帐号10000~10100,密码都是1 4、欢迎大家开发暗夜IM小应用,可以是独立的网页小应用程序,也可以是与暗夜...

    swing界面设计之JTree

    (五) JTree右键菜单实现编辑、添加、删除节点 63 Test.java源代码 63 (六) 功能齐全的JTree例子 66 TreeEditTest.java源代码 66 (七) JTree控件的使用 70 构造函数: 70 TreeModel接口 70 DefaultTreeModel缺省版本 ...

    Simple-Distributed-FTP:简单的分布式应用程序将文件从发送到服务器组

    简单分布式FTP 简单的分布式应用程序,用于从服务器组发送文件到服务器组。 这是分布式计算技术课程通过的项目之一。 它是使用RMI用Java编写的。 运行简单测试 ... 服务器动态数量(添加或删除服务器)

    iBATIS实战

    3.4 将iBATIS添加到应用程序中 49 3.4.1 在独立应用程序中使用iBATIS 50 3.4.2 在Web应用程序中使用iBATIS 50 3.5 iBATIS和JDBC 51 3.5.1 释放JDBC资源 51 3.5.2 SQL注入 51 3.5.3 降低复杂度 52 3.6 配置iBATIS(续)...

    毕设项目基于Vue开发的轨道交通出行助手小程序源码+项目说明.zip

    * "出行"页面在网络图模式下的背景仅仅是一张图片,现不知道如何去将其转换成可以交互的地图(map组件只能自定义样式,无法做到在图片上打点) * 各icon可能还需要自己画一下,网上找的感觉不太令人满意 * 本地...

    百度地图 功能模块完整版 开发指南

    (4)Demo中放入了测试用ak,开发者请申请并更换为自己的【服务端】ak; (5)开发者在LBS开放平台官网添加数据后需发布到检索并更换demo中的geoTableId; (6)其他注意事项请参考【CloudSearchDemoViewController....

    terraform-google-kubernetes-engine:用于配置 GKE 集群的 Terraform 模块

    如果configure_ip_masq为 true,则使用提供的non_masquerade_cidrs添加ip-masq-agent configmap 还提供了用于创建私有集群、beta 私有集群和 beta 公共集群的子模块。 测试版子模块允许使用各种 GKE 测试版功能。 ...

    习----题-Java-Web程序设计教程-[共2页].pdf

    Java Web 程序设计教程 30 Student s=list.get(i);// System.out.println(s.getSno()+"," +s.getSname()+","+s.getScore());...实现该类并包含添加、删除、修改、按姓名查等几个方法。编写 主程序测试。 参考如下。

    基于CBS算法多AGV路径规划仿真系统源码+项目开发说明.zip

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合...

    传智播客扫地僧视频讲义源码

    08_C动态库升级成框架案例_方法1动态库中直接添加回调函数_传智扫地僧 09_C动态库升级成框架案例_方法2把回调函数缓存到动态库_编写 10_C动态库升级成框架案例_方法2把回调函数混存到动态库_测试 11_C++基础课程day...

    无闻Go语言视频教程

     │ 【Go Web基础】05文章的添加与删除  │ 【Go Web基础】06评论与分类显示  │ 【Go Web基础】07为文章添加标签  │ 【Go Web基础】08文章附件上传  │ 【Go Web基础】09国际化支持  │ 【Go Web基础...

    精通ANDROID 3(中文版)1/2

    17.1.1 从Google获取map-api密钥  17.1.2 MapView和MapActivity  17.1.3 使用覆盖图添加标记  17.2 位置包  17.2.1 使用Android进行地理编码  17.2.2 使用后台线程进行地理编码  17.2.3 ...

    vim-operator-surround:Vim运算符映射,用括号(如paren,quote等)包围文本对象

    删除文本对象中的环绕。 这个插件在或会更有用。 您可以在全局范围和文件类型特定范围内自定义和添加环绕声定义。该插件的政策(或我不使用) 简便性:所有操作都应通过操作员映射完成。 可扩展性:应该使用g:...

    精通Android 3 (中文版)2/2

    17.1.1 从Google获取map-api密钥  17.1.2 MapView和MapActivity  17.1.3 使用覆盖图添加标记  17.2 位置包  17.2.1 使用Android进行地理编码  17.2.2 使用后台线程进行地理编码  17.2.3 ...

    gadgetron-azure:在Azure中部署Gadgetron图像重建的示例代码

    Kubernetes中的Gadgetron 该存储库包含用于在... 该脚本是在GADGETRON_REMOTE_WORKER_COMMAND环境变量中指定的,该环境变量引用了ConfigMap中添加的脚本。 这也是PreStop生命周期挂钩脚本,用于确保具有活动连接的Gadge

Global site tag (gtag.js) - Google Analytics