对象序列化
需求:持久化(能保存到硬盘),网络传输(可序列化对象可进行电脑间通信)
序列化:
1.实现Serializable接口
2.对象流:ObjectInputStream/ObjectOutputStream
3.transient关键字(当有不想被写入文件的内容,就用这个关键字修饰,比如密码或隐私内容)

泛型
泛型是将类型参数化。能提高类型安全(将对类型的检验由运行提前到编译期),简化类型转化的过程(处理泛型时系统自动对其进行类型转化)。
语法:类名<T(T为类型参数,可以是任何类型)>
泛型只能处理Integer、String类,不能处理int/long等基本类型。
获取变量类型 变量名.getClass().getName();
泛型类型边界用继承,表示泛型始终属于该种数据:<t extends="" number="">表示泛型始终是数字类型,可以是double可以是integer。
通配符:<?> ? 可以是任何方法对象。
泛型方法:修饰符 方法类型 <t> 返回类型 方法名(T[] ts,T t)
非泛型类中也可以有泛型方法。
泛型继承:1)父子都为泛型,子类必须调用父类,子类中须有父类的类型参数(即使用不到),若有参函数则要显示super();无参函数不用。2)父类泛型子类非泛型,一般来讲不成立,除非父类不指定泛型,但这样就没有泛型的意义。3)父类非泛型子类泛型,正常些,没有强制性要求。
泛型方法覆盖与常规覆盖相同。</t></t>

集合框架
集合框架是为程序处理对象提供的标准方式。如果不用集合框架,可用1)数组,长度类型固定。2)专门类,缺乏集合同一的操作方式,不易扩展。
而集合框架能提高工作性能,操作统一(List,Set,Collection接口),提高扩展性,能实现迭代器(提供访问元素的统一方法)接口Iterator。
集合:存一组单个数据
Map:存一组成对数据
集合接口/实现类:ArrayList HashSet LinkedList
Set继承自Collection,但set不允许出现相同的接口。
List继承自Collection,以列表形式存储,可以出现相同的元素。
集合实现类:
ArrayList:数组列表,当内存满时自动扩容。当ArrayList与数组交互,用.toArray()方法。
HashSet:链表。特殊用法:.poll 获取并移除链表中第一位元素。.peek 获取但不移除链表中第一个元素。
LinkedList:散列表,不做特殊说明时,列表长度为16.散列表中的顺序与输入顺序无关,是通过哈希算法存储,但速度很快且保证元素唯一。
(添加.add(),修改.set(),删除.remove(可以是删除“内容”,也可以是删除某一位置)

迭代器
迭代器,用来遍历元素,可将遍历与数据分离。
Iterator,用来遍历集合中元素的对象。
for-each,比起iterator更简单直接。for(String s:list){打印s}(遍历list得到每一个s)

Map接口
(Map自成一个体系,与Collection不同)
HashMap实现类:(key,value)key存位置,具有唯一性,value存内容。
map.keySet(),返回key值。map添加元素用.put( ,)
TreeMap:树结构实现,自动排序,所以输入的key必须是能进行排序的类型。

当需求是查找更多时,用ArrayList,因为底层是数组,直接按数据查找更快。
当需求是插入删除操作更多时,用LinkedList,底层是链表,只需改变两头节点进行操作。