Java数据结构
Java Vector类:
- 关于初始化的一种方法:
Vector(int size, int incr)
当我们添加的的元素大于size时,每一个多出的元素Vector会给其增加两个incr个元素数目的空间
void ensureCapacity(int minCapacity)
向量的容量扩展到minCapacity
Java 迭代器
type b;
Iterator<type> it = b.iterator();
使用迭代器之前首先要声明一个集合框架类型,之后再初始化迭代器。
迭代器方法
while(it.hasnext()){
System.out.println(it.next());
}
用于遍历迭代器
Java泛型
public static <E> void printArray(E[] inputArray)
- 同C++一样,类型参数也能作为返回类型。
- 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)
对于有界的类型参数
- 定义:我们希望限制传递的类型种类的范围,例如我们只希望传递Number或者其子类型
- 实现:要声明一个有界的类型参数,首先列出类型参数的名称,后跟extends关键字,最后紧跟它的上界。
实例:
public static <E extends Number> void defprint(E num)
限制为Number的子类。
泛型类
public class Box<T>
T代表变量类型
类型通配符
List<?> data
?可以代表Number,String等类型
List<? extends Number> data
代表上限为Number
Java序列化
class Emploee implements java.io.Serializable{
public String name;
public String address;
public int number;
public void mailCheck() {
System.out.println("Mailing a check to" + name + " " + address);
}
}
public class serialize {
public static void main(String[] args) {
Emploee e = new Emploee();
e.name = "Ali";
e.address = "hfkshfksahf";
e.number = 101;
try {
FileOutputStream fileout = new FileOutputStream("c.ser");
ObjectOutputStream out = new ObjectOutputStream(fileout);
out.writeObject(e);
out.close();
fileout.close();
System.out.println("Serialized data is saved");
}catch(IOException i) {
i.printStackTrace();
}
}
}
一个类要想序列化成功,必须满足两个条件:
- 该类必须实现 java.io.Serializable 对象
该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的,即用关键字 transient 声明。
反序列化
public static void main(String[] args) { Emploee e = null; try { FileInputStream filein = new FileInputStream("c.ser"); ObjectInputStream obin = new ObjectInputStream(filein); e = (Emploee)obin.readObject(); filein.close(); obin.close(); }catch(IOException i) { System.out.println(i); }catch(ClassNotFoundException n) { System.out.println(n); } System.out.println(e.address +" "+e.name+" "+e.number); }
注意:被声明为transient的对象不会传出到输出流,因此在反序列化时不会被赋值。