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

Map的keySet方法序列化BUG问题及其解决方法

    博客分类:
  • Java
阅读更多
Map的keySet在进行序列化时,报错:java.io.NotSerializableException: java.util.HashMap$KeySet。这个异常可以再oracle的官网:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4756277中查到原因,为了方便日后测试序列化问题,给出序列化的测试类。
序列化的测试类:
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by IntelliJ IDEA.
 * User: dragon
 * Date: 12-8-20
 * Time: 上午11:04
 * 序列化测试类
 */
public class MapCollectionSerializeTest {

    private static void trySerialize (Object o) {
        try {
            ObjectOutputStream stream
                = new ObjectOutputStream(new ByteArrayOutputStream());
            System.out.print("Trying to serialize " + o + "...");
            stream.writeObject(o);
            stream.flush();
            System.out.println("done");
        }
        catch (Exception e) {
            System.out.print("failed: ");
            e.printStackTrace();
        }
    }

    // ----------------------------------------------------------------------
    // Entry point

    public static void main (String[] args) {

        Map map = new HashMap();
        map.put("one", "one");
        map.put("two", "two");
        map.put("three", "three");

        System.out.println("keySet():");
        trySerialize(map.keySet());
        System.out.println("entrySet():");
        trySerialize(map.entrySet());
        System.out.println("values():");
        trySerialize(map.values());

    }
}


解决方法:
Set set = new HashSet(map.keySet());
0
3
分享到:
评论

相关推荐

    Java使用keySet方法获取Map集合中的元素

    Java使用keySet方法获取Map集合中的元素 Java语言中,Map集合是一种键值对形式的集合,它可以存储大量的数据,但是在实际应用中,我们经常需要获取Map集合中的元素,这时就需要使用keySet方法。本文将详细介绍Java...

    map遍历的四种方法

    本文将详细介绍四种不同的遍历`Map`的方式,并通过具体的代码示例来解释每种方法的特点及适用场景。 #### 一、通过`Map.keySet()`遍历键和值 这种方法首先获取`Map`的所有键集合(`keySet`),然后通过迭代器或者...

    Map遍历方法总结

    ### Map遍历方法总结 #### 一、引言 在Java编程中,`Map`是一种常用的集合类型,用于存储键值对数据。由于其高效的数据查找特性,在许多场景下...此外,理解`Map.Entry`的概念及其提供的方法也是提高遍历效率的关键。

    map遍历的三种方法

    Map 遍历是集合操作中的一种重要操作,一般来说,有三种方式来遍历 Map 集合:使用 values() 方法遍历、使用 keySet() 方法遍历和使用 entrySet() 方法遍历。 第一种方法:使用 values() 方法遍历 这个方法是最...

    java中Map的两种遍历方法

    本文将详细探讨在Java中遍历`Map`的两种常用方法:通过`keySet()`方法和通过`entrySet()`方法。 ### 一、通过`keySet()`方法遍历`Map` #### 方法概述 `keySet()`方法返回一个包含`Map`中所有键的`Set`视图。通过...

    java Map遍历方法

    `keySet()`方法返回`Map`中所有键的`Set`视图。遍历这个键集,然后使用`get()`方法获取对应的值。 ```java for (String key : map.keySet()) { Integer value = map.get(key); System.out.println("Key: " + ...

    CommonsCollection6反序列化链学习.doc

    CommonsCollection6 反序列化链学习 CommonsCollection6 反序列化链学习是 Java 中一个常见的反序列化攻击链,攻击者可以利用该链来执行恶意代码。下面我们将详细介绍 CommonsCollection6 反序列化链的原理和实现...

    hashmap学员简单增删改查 序列化

    - **遍历元素**:可以使用`keySet()`或`entrySet()`方法获取迭代器进行遍历。 ### 二、Java序列化机制 #### 2.1 序列化概念 序列化是指将对象的状态信息转换为可以存储或传输的形式的过程。在Java中,如果一个类要...

    java Map 遍历方法

    ### Java Map遍历方法详解 在Java编程语言中,`Map`接口是集合框架中的一个核心组成部分,它存储键值对映射。本篇文章将详细介绍几种常用的遍历`Map`的方法,包括使用传统迭代器(Iterator)、增强型for循环(For-...

    遍历MAP的几种方法

    遍历MAP的几种方法,利用keyset进行遍历,它的优点在于可以根据你所想要的key值得到你想要的 values,更具灵活性

    java中Map集合的常用遍历方法及HashMap的应用实例

    2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、遍历Map.values():它是Map中value的集合,我们可以直接通过这个集合遍历 Map中的值,却不能读取key。

    map遍历的四种方式及性能比较

    ### Java中遍历Map的四种方式及性能比较 在Java编程中,`Map`是一种非常重要的数据结构,用于存储键值对。对于`Map`的遍历,不同的遍历方式有着不同的性能表现以及适用场景。本文将详细介绍四种常见的遍历`Map`的...

    Map遍历方法

    `keySet()`方法返回一个包含`Map`中所有键的`Set`视图。可以通过该方法获取到一个由键组成的集合,然后利用`for-each`循环或者迭代器`Iterator`来遍历每个键,并通过键获取对应的值。 ```java Map, String> map = ...

    map集合遍历的五种方法

    Map接口还提供了`keySet()`方法,返回所有键的集合,可以先遍历键集,再通过键获取对应的值。示例代码如下: ```java for (String key : map.keySet()) { Integer value = map.get(key); System.out.println(...

    Java Map 遍历比较齐全的解析.docx

    这是最基础的遍历方式,通过获取`Map`的`keySet`,然后用增强型for循环遍历`keySet`,再通过`get()`方法获取对应的`value`。 ```java for (Integer in : map.keySet()) { String str = map.get(in); System.out...

    Java实现基于内存的搜索引擎设计和实现.zip

    比如在类Index中的getDictionary方法中,需要返回所有保存的Term,可以直接调用map结构的keySet方法返回一个Set对象,包含了所有的键,也即所有的Term,类似的还有由于实现了子类的compareTo以及equal方法,对于子类...

    java遍历大容量map的正确方法.pdf

    这种方法是最直观的,直接获取Map的keySet并进行迭代。代码简洁,但存在效率问题。在遍历过程中,每次获取value都需要通过`map.get(key)`调用来查询,这可能导致额外的计算开销,特别是当Map实现不直接支持快速访问...

    另一种遍历Map的方式

    这里,我们使用keySet()获取整个Map的Key集合,然后使用Iterator遍历整个集合,每次迭代都可以获取当前Key,并使用get()方法获取对应的Value。 优点 ---- 使用Map.Entry和Map.entrySet()遍历Map的方式有很多优点:...

    findbugs常见Bug以及处理办法

    ### FindBugs常见Bug及其处理方法详解 #### 一、Bug级别 FindBugs是一款用于Java项目的静态代码分析工具,能够帮助开发者发现潜在的问题并提高软件质量。它根据Bug可能导致的不同后果,定义了一系列的Bug级别: 1...

    JAVA遍历Map所有元素.doc

    尽管不推荐,但`keySet()`方法也是可以用来遍历Map的一种方式。首先,`keySet()`返回的是Map中所有键的`Set`集合,然后我们可以通过迭代这个键集,每次迭代获取一个键,再通过`Map.get(key)`获取对应的值。以下是...

Global site tag (gtag.js) - Google Analytics