A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1.         HashMap<Student,String> hm = new HashMap<Student,String>();

  2.                
  3.                 hm.put(new Student("lisi",38),"北京");
  4.                 hm.put(new Student("zhaoliu",24),"上海");
  5.                 hm.put(new Student("xiaoqiang",31),"沈阳");
  6.                 hm.put(new Student("wangcai",28),"大连");
  7.                 hm.put(new Student("zhaoliu",24),"铁岭");
复制代码
如果说hashMap中 我们修改了其中元素的值,这样我们就无法对原来的值进行删除 造成内存的溢出,请问 如果是遇到这样的情况我们该怎么处理?

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

5 个回复

正序浏览
map集合的两种取出方式:
1,Set<k> keySet,将map中所有的键存入到Set集合。因为set具备迭代器。、
        所有可以迭代方式取出所有的键,再根据ger方法。获取每一个键对应的值。

        Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。

2,Set<Map,Entry<k.v>> entrySet:将map集合中的映射关系存入到set集合中,
        而这个关系的数据类型就是:Map.Entry。
import java.util.*;
class  MapDemo2
{
        public static void main(String[] args)
        {
                Map<String,String> map = HashMap<String,String>();

                map.put("02","zhangsan2");
                map.put("03","zhangsan3");
                map.put("01","zhangsan1");
                map.put("04","zhangsan4");

                //将map集合中的映射关系取出。存入到Set集合中。
                Set<Map.Entry<String,String>> entrySet = map.entrySet();

                Iterator<Map.Entry<String,String>> it = entrySet.iterator();

                while(it.hasNext())
                {
                        Map.Entry<String,String> me = it.next();
                        String key = me.getKey();
                        String value = me.getValue();

                        System.out.println(key+":"+value);
                }


                /*
                //先获取map集合的所有键的Set集合,keySet();
                Set<String> keySet = map.keySet();

                //有了Set集合。就可以获取其迭代器。
                Iterator<String> it = keySet.iterator();

                while(it.hasNext())
                {
                        String key = it.next();
                        //有了键可以通过map集合的get方法获取其对应的值。
                        String value = map.get(key);
                        System.out.println("key"+key+",value:"+value);
                }
                */
        }
}


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
毛羚杨 发表于 2014-2-23 22:15
呀 我就是想的么 这个应该是不可以的,人家都说java是一个比较严谨的语言呀,看来我想的是对的 对于这样 ...

Java还说内存回收呢,不是照样存在内存泄露吗,没有真正不存在问题的语言
回复 使用道具 举报
Amorvos 发表于 2014-2-23 22:08
尽量不要用可变对象作为HashMap,HashSet的KEY,如果确实需要使用可变对象作为KEY,就尽量不要修改KEY的可变 ...

呀 我就是想的么 这个应该是不可以的,人家都说java是一个比较严谨的语言呀,看来我想的是对的 对于这样的问题,java不能避免 那咱们就不能用这个了 不能对key进行修改了
回复 使用道具 举报
尽量不要用可变对象作为HashMap,HashSet的KEY,如果确实需要使用可变对象作为KEY,就尽量不要修改KEY的可变对象。这是一个Java的BUG,无法解决,只能尽量避免。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
不能并发修改的,否则会抛异常的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马