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());
分享到:
相关推荐
Java使用keySet方法获取Map集合中的元素 Java语言中,Map集合是一种键值对形式的集合,它可以存储大量的数据,但是在实际应用中,我们经常需要获取Map集合中的元素,这时就需要使用keySet方法。本文将详细介绍Java...
本文将详细介绍四种不同的遍历`Map`的方式,并通过具体的代码示例来解释每种方法的特点及适用场景。 #### 一、通过`Map.keySet()`遍历键和值 这种方法首先获取`Map`的所有键集合(`keySet`),然后通过迭代器或者...
### Map遍历方法总结 #### 一、引言 在Java编程中,`Map`是一种常用的集合类型,用于存储键值对数据。由于其高效的数据查找特性,在许多场景下...此外,理解`Map.Entry`的概念及其提供的方法也是提高遍历效率的关键。
Map 遍历是集合操作中的一种重要操作,一般来说,有三种方式来遍历 Map 集合:使用 values() 方法遍历、使用 keySet() 方法遍历和使用 entrySet() 方法遍历。 第一种方法:使用 values() 方法遍历 这个方法是最...
本文将详细探讨在Java中遍历`Map`的两种常用方法:通过`keySet()`方法和通过`entrySet()`方法。 ### 一、通过`keySet()`方法遍历`Map` #### 方法概述 `keySet()`方法返回一个包含`Map`中所有键的`Set`视图。通过...
`keySet()`方法返回`Map`中所有键的`Set`视图。遍历这个键集,然后使用`get()`方法获取对应的值。 ```java for (String key : map.keySet()) { Integer value = map.get(key); System.out.println("Key: " + ...
CommonsCollection6 反序列化链学习 CommonsCollection6 反序列化链学习是 Java 中一个常见的反序列化攻击链,攻击者可以利用该链来执行恶意代码。下面我们将详细介绍 CommonsCollection6 反序列化链的原理和实现...
- **遍历元素**:可以使用`keySet()`或`entrySet()`方法获取迭代器进行遍历。 ### 二、Java序列化机制 #### 2.1 序列化概念 序列化是指将对象的状态信息转换为可以存储或传输的形式的过程。在Java中,如果一个类要...
### Java Map遍历方法详解 在Java编程语言中,`Map`接口是集合框架中的一个核心组成部分,它存储键值对映射。本篇文章将详细介绍几种常用的遍历`Map`的方法,包括使用传统迭代器(Iterator)、增强型for循环(For-...
遍历MAP的几种方法,利用keyset进行遍历,它的优点在于可以根据你所想要的key值得到你想要的 values,更具灵活性
2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、遍历Map.values():它是Map中value的集合,我们可以直接通过这个集合遍历 Map中的值,却不能读取key。
### Java中遍历Map的四种方式及性能比较 在Java编程中,`Map`是一种非常重要的数据结构,用于存储键值对。对于`Map`的遍历,不同的遍历方式有着不同的性能表现以及适用场景。本文将详细介绍四种常见的遍历`Map`的...
`keySet()`方法返回一个包含`Map`中所有键的`Set`视图。可以通过该方法获取到一个由键组成的集合,然后利用`for-each`循环或者迭代器`Iterator`来遍历每个键,并通过键获取对应的值。 ```java Map, String> map = ...
Map接口还提供了`keySet()`方法,返回所有键的集合,可以先遍历键集,再通过键获取对应的值。示例代码如下: ```java for (String key : map.keySet()) { Integer value = map.get(key); System.out.println(...
这是最基础的遍历方式,通过获取`Map`的`keySet`,然后用增强型for循环遍历`keySet`,再通过`get()`方法获取对应的`value`。 ```java for (Integer in : map.keySet()) { String str = map.get(in); System.out...
比如在类Index中的getDictionary方法中,需要返回所有保存的Term,可以直接调用map结构的keySet方法返回一个Set对象,包含了所有的键,也即所有的Term,类似的还有由于实现了子类的compareTo以及equal方法,对于子类...
这种方法是最直观的,直接获取Map的keySet并进行迭代。代码简洁,但存在效率问题。在遍历过程中,每次获取value都需要通过`map.get(key)`调用来查询,这可能导致额外的计算开销,特别是当Map实现不直接支持快速访问...
这里,我们使用keySet()获取整个Map的Key集合,然后使用Iterator遍历整个集合,每次迭代都可以获取当前Key,并使用get()方法获取对应的Value。 优点 ---- 使用Map.Entry和Map.entrySet()遍历Map的方式有很多优点:...
### FindBugs常见Bug及其处理方法详解 #### 一、Bug级别 FindBugs是一款用于Java项目的静态代码分析工具,能够帮助开发者发现潜在的问题并提高软件质量。它根据Bug可能导致的不同后果,定义了一系列的Bug级别: 1...
尽管不推荐,但`keySet()`方法也是可以用来遍历Map的一种方式。首先,`keySet()`返回的是Map中所有键的`Set`集合,然后我们可以通过迭代这个键集,每次迭代获取一个键,再通过`Map.get(key)`获取对应的值。以下是...