序列化和类集的应用举例

本文介绍如何使用Java实现图书信息的序列化与反序列化,并利用HashSet存储每本书的作者名单,演示了对象的存储及恢复过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * 本程序实现对象序列化和反序列化操作以及有关类集的应用。
 * 对象序列化需要实现Serializable接口并通过ObjectOutputStream类对象的writeObject()实现。
 * 反序列化通过ObjectInputStream类对象的readObject()实现。
 * 如果要实现一对多的关系,如本例:一本书可以有多个作者,考虑使用类集。
 * 常用类集的树结构:
 *   Collection 常用方法有:add(),remove(),iterator(),size()等
 *     |--List:允许有重复元素
 *      |--ArrayList:异步,只能用Iterator遍历
 *      |--Vector:同步,能用Iterator和Enumeration遍历
 *           |--Stack 常用方法有:push(),pop()等。
 *     |--Set:不允许有重复元素
 *      |--HashSet:散列,无序
 *      |--TreeSet:有序,按Comparable排序
 *   Map 常用方法有:put(),get()等,遍历先由 Set<Map.Entry<K,V>> entrySet()方法得到Set类集,再用Iterator得到Map.entry接口的对象,用Map.entry里的方法 getKey()和 getValue()得到相应值。
 *     |--HashMap:异步
 *     |--Hashtable:同步
 *     |--Properties:支持Enumeration遍历
 *     |--TreeMap:按key值排序
 */


package com.lwj.demo;

import java.io.*;
import java.util.*;

class Book implements Serializable{
 
 private static final long serialVersionUID = 1L;
 private String name;
 private double price;
 private String publisher;
 private HashSet<String> author;//可能有多个作者,实现一对多
 
 public Book(){
  this.author=new HashSet<String>();
 }
 
 public Book(String name, double price, String publisher) {
  this();
  this.name = name;
  this.price = price;
  this.publisher = publisher;
 }


 public Boolean add(String str){
  return this.author.add(str);
 }

 public String toString() {
  Iterator<String> iter=this.author.iterator();
  StringBuffer str=new StringBuffer();
  while(iter.hasNext())
   str.append(iter.next()+"    ");
  str.append("著");
  return "书名:"+this.name+"/t价格:"+this.price+"元/t出版社:"+this.publisher+"/t作者:"+str;
 }
}

public class SerializableDemo {

 public static void main(String[] args) throws Exception{
  //初始化三本书
  Book book1=new Book("Java 入门",58.9,"小陆出版社");
  Book book2=new Book("Java 开发指南",98.9,"新技术出版社");
  Book book3=new Book("Java 实战经典",155.9,"大海出版社");
  book1.add("陆武军");
  book2.add("陆武军");
  book2.add("刘跃军");
  book3.add("李军");
  book3.add("王五");
  
  //对象序列化
  ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("1"));
  out.writeObject(book1);
  out.writeObject(book2);
  out.writeObject(book3);
  out.close();
  
  //对象反序列化
  ObjectInputStream in=new ObjectInputStream(new FileInputStream("1"));
  Book book4=(Book)in.readObject();
  System.out.println(book4);
  Book book5=(Book)in.readObject();
  System.out.println(book5);
  Book book6=(Book)in.readObject();
  System.out.println(book6);
  in.close();
 }
}

运行结果:

书名:Java 入门 价格:58.9元 出版社:小陆出版社 作者:陆武军    著
书名:Java 开发指南 价格:98.9元 出版社:新技术出版社 作者:陆武军    刘跃军    著
书名:Java 实战经典 价格:155.9元 出版社:大海出版社 作者:李军    王五    著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值