JavaSE学习笔记

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修饰的成员变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值