序列化:

1.将程序中对象的各项信息,序列化输出到文件中保存
2.方向是Out,使用的流是ObjectOutputStream
3.使用的方法是out.writeObject(目标对象);
4.注意:如果一个类的对象想要被序列化,那么这个类必须实现Serializable接口

反序列化:

  1. 1.将之前输出到文件中的数据,读取回程序中,并把读到的数据重新恢复成对象<br /> 2.方向是in,使用的流是ObjectInputStream<br /> 3.使用的方法是in.readObject();<br /> 4.1注意:反序列化指定的文件路径,必须与序列化输出的文件路径一样<br /> 4.2注意:自定义类需要重写toString()才能查看对象的属性与属性值,否则打印地址值<br /> 4.3注意:一次序列化操作对应一次反序列化操作,或者UID必须保持一致,如果不一致,会报错<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/244644/1639738559685-9a827bbb-5812-4bb5-bdf9-43456e1f3ba8.png#clientId=uf6db29ad-9608-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uf2e7dc5f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=713&originWidth=1483&originalType=url&ratio=1&rotation=0&showTitle=false&size=96526&status=done&style=none&taskId=u95827882-ec0a-4a0e-b0be-a65512dd10e&title=)
  1. 反序列化如何成功?
  2. 核心:Student类中的UID,与反序列化流中的UID保持一致
  3. 1)一次序列化对应一次反序列化[推荐]
  4. 2)一次序列化后不修改Student中的内容,然后反序列化
  5. 3)将Student中的UID写成固定值
  6. 注意:反序列化流持有的UIDStudent类中的UID不一致时,反序列化会失败
  7. 比如:使用自动生成的UID,先序列化,然后修改Student,再来反序列化,这样就会失败

泛型

  1. 1.泛型,不是指一种具体的类型,而是说,这里有个类型需要设置<br /> 那么后续具体需要设置成什么类型,得看具体的业务<br /> 2.泛型通常与集合一起使用,用来限制集合中存入的元素类型<br /> 泛型具体设置成什么类型,那么这个集合只能存这个类型的元素<br /> 3.泛型是一颗"语法糖"<br /> 1)泛型可以把报错的时机提前,用于在编译期检查集合的元素类型<br /> 只要不是泛型设置的类型,就报错,通不过编译<br /> 2)泛型只在编译时生效,编译通过以后,说明符合语法规范<br /> 泛型就会被抛弃,编译生成的字节码文件中没有泛型<br /> 4.泛型的类型必须使用引用类型,比如:Student String Integer<br /> 5.泛型方法:如果想要在方法上使用泛型,必须两处同时出现<br /> 1)一个是方法的参数列表中的参数类型<br /> 2)方法返回值类型前的泛型类型,表示这是一个泛型方法<br />[

](https://blog.csdn.net/weixin_43884234/article/details/122001714)

Collection集合

1.Collection是集合层次中的根接口
2.集合的继承关系
image.png
3.是集合层次的根接口,学习抽象父级的公共方法

Collection集合方法总结
  1. 单个集合的操作:
  2. boolean add(E e) 将指定元素添加到集合中
  3. void clear() 清空集合
  4. boolean contains(Object o) 判断本集合是否包含指定的元素
  5. boolean equals(Object o) 比较集合对象与参数对象o是否相等
  6. int hashCode() 返回本集合的哈希码值。
  7. boolean isEmpty() 判断本集合是否为空
  8. boolean remove(Object o) 从本集合中移除指定元素o
  9. int size() 返回本集合中元素的个数
  10. Object[] toArray() 将本集合转为数组
  11. 集合间的操作:
  12. boolean addAll(Collection<> c) c集合中的所有元素添加到本集合中
  13. boolean containsAll(Collection<> c) 判断本集合是否包含c集合的所有元素
  14. boolean removeAll(Collection<> c) 移除本集合中属于参数集合c的所有元素
  15. boolean retainAll(Collection<> c) 保留本集合与参数集合c的公共元素
  16. 集合的迭代:
  17. Iterator iterator() 返回本集合的迭代器
  18. //集合的迭代/遍历
  19. /**
  20. * 迭代步骤:
  21. * 1.获取集合对应的迭代器
  22. * 2.通过迭代器判断集合中是否有下一个元素可以迭代
  23. * 3.通过迭代器获取当前迭代到的元素
  24. */
  25. Iterator<Integer> it = c2.iterator();//1.获取集合对应的迭代器
  26. //2.通过迭代器判断集合中是否有下一个元素可以迭代 it.hasNext()
  27. while (it.hasNext()){
  28. System.out.println(it.next());//3.通过迭代器获取当前迭代到的元素
  29. }

List接口

List接口的特点
1.List集合是有下标的
2.List集合是有顺序的
3.List集合可以存放重复的数据
List集合方法总结

  1. 单个集合间的操作
  2. void add(int index, E element) 在集合的指定下标index处插入指定元素element
  3. E get(int index) 返回本集合中指定下标index处的元素
  4. E remove(int index) 移除本集合中指定下标index处的元素
  5. E set(int index, E element) 用参数元素element替换集合中指定下标index处的元素
  6. int indexOf(Object o) 判断指定元素o在本集合中第一次出现的下标,如果不存在,返回-1
  7. int lastIndexOf(Object o) 判断指定元素o在本集合中最后一次出现的下标,如果不存在,返回-1
  8. List subList(int fromIndex, int toIndex) 截取子集合,包含formidex处的元素,不包含toIndex处的元素