String a = "hello";
String a = new String("hello");
上面两种方法是不一样的 直接赋值的地址是在常量池,new出来的是在堆空间指向常量池
执行效率StringBuilder>StringBuffer>String
StringBuilder和StringBuffer的扩容机制为扩大为原来的2倍加2
StringBuffer是加了同步方法的StringBuilder
单例设计模式
饿汉式
//饿汉式
class Bank{
//1.私有化构造器
private Bank(){
}
//2.内部创建类的对象
//要求此对象也必须声明为静态的
private static Bank instance = new Bank();
//3.提供公共的静态方法,返回类的对象
public static Bank getInstance(){
return instance;
}
}
懒汉式
class Order {
//1.私有化类的构造器
private Order() {
}
//2.声明当前类对象 没有初始化
//4.此对象也必须声明为static
private static Order instance = null;
//3.声明public、static的返回当前类对象的方法
public static Order getInstance() {
if (instance == null) {
synchronized (Order.class){
instance = new Order();
return new Order();
}
}
return instance;
}
}
懒汉式第一次创建可能有线程安全问题需要加同步锁
枚举类只有一个值时时单例模式
ArrayList jdk1.7时候初始数组空间为10 扩容机制为1.5倍 如果大于1.5倍则按需要添加的全部元素空间为数组容量 例如初始为10 一次加20个 直接扩容到30
ArrayList jdk1.8的时候初始为0 在第一次添加的时候比较添加的元素数量和10的大小,如果超出10则为全部元素的数量
vector是线程安全的Arraylist在jdk1.0时候就有了,扩容机制和Arraylist不一样,每次扩容为2倍,初始为0,一般不使用

LinkedList 底层为双向链表 定义静态内部类的节点类Node

LinkedList的添加过程 第一步拿last 然后把调用Node构造方法(如上)创建Node item为元素 last为赋值给prev 再把容器类的最后一个元素last重新赋值为当前Node 如果last为空则说明为第一个元素,赋值给first,否则就将上一个last的next设置为next,双向链表结构

序列化与反序列化
1.需要实现接口:Serializable 2.当前类提供一个全局常量:serialVersionUID 3.除了当前Person类需要实现Serializable接口之外,还必须保证其内部所有属性 也必须是可序列化的。(默认情况下,基本数据类型可序列化) 补充:ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
338

被折叠的 条评论
为什么被折叠?



