资料内容:
1-8)ArrayList、Vector、LinkedList 的区别及其优缺点?HashMap、HashTable 的区别及优缺点?
ArrayList 和 Vector 是采⽤数组⽅式存储数据的,是根据索引来访问元素的,都可以
根据需要⾃动扩展内部数据长度,以便增加和插⼊元素,都允许直接序号索引元素,但
是插⼊数据要涉及到数组元素移动等内存操作,所以索引数据快插⼊数据慢,他们最⼤
的区别就是 synchronized 同步的使⽤。
LinkedList 使⽤双向链表实现存储,按序号索引数据需要进⾏向前或向后遍历,但
是插⼊数据时只需要记录本项的前后项即可,所以插⼊数度较快!
如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使⽤ Vector
或 ArrayList 都可以。如果是对其它指定位置的插⼊、删除操作,最好选择 LinkedList
HashMap、HashTable 的区别及其优缺点:
HashTable 中的⽅法是同步的 HashMap 的⽅法在缺省情况下是⾮同步的 因此在多线程环境下需要做额外的同步机制。
HashTable 不允许有 null 值 key 和 value 都不允许,⽽ HashMap 允许有 null 值 key和 value 都允许 因此 HashMap 使
⽤ containKey()来判断是否存在某个键。
HashTable 使⽤ Enumeration ,⽽ HashMap 使⽤ iterator。
Hashtable 是 Dictionary 的⼦类,HashMap 是 Map 接⼝的⼀个实现类。
1-9)使⽤ StringBuffer ⽽不是 String
当需要对字符串进⾏操作时,使⽤ StringBuffer ⽽不是 String,String 是 read-only 的,如果对它进⾏修改,会产⽣临时对象,
⽽ StringBuffer 是可修改的,不会产⽣临时对象。
1-10)集合的扩充
ArrayList list = new ArrayList(90000); list扩充多少次??
public ArrayList() {
this(10);
}
默认的扩充是10由此计算
1-11)java的拆包与封包的问题
System.out.println("5" + 2);
521-12)Java中Class.forName和ClassLoader.loadClass的区别
Class.forName("xx.xx")等同于Class.forName("xx.xx",true,CALLClass.class.getClassLoader()),第⼆个参数(bool)表⽰装载类的时候是否
初始化该类,即调⽤类的静态块的语句及初始化静态成员变量。
ClassLoader loader = Thread.currentThread.getContextClassLoader(); //也可以⽤(ClassLoader.getSystemClassLoader())
Class cls = loader.loadClass("xx.xx"); //这句话没有执⾏初始化
forName可以控制是否初始化类,⽽loadClass加载时是没有初始化的。