Java Notes

1. Interface可以多重继承

interface A {}
interface B {}
interface C extends A, B {}

类不支持多重继承,是为了避免菱形继承后,一个接口有多个实现,不能决定使用哪个实现。


2. Object的equals和hashcode方法

equals为true时,hashcode必定相等
hashcode相等,equals不一定为true

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html


3. 通过反射获取对象属性的值


String value = (String) new PropertyDescriptor(field.getName(), targetObj.getClass())

                        .getReadMethod().invoke(targetObj);


4. Protected方法/成员 跨包继承

When a protected member is inherited across package it becomes private member of inherited class.
When a protected member is inherited within the same package it becomes default member of inherited class.

如果要访问protected的方法,必须override成public的方法。


5. HashMap的key,value均可为null。Hashtable的key,value均不可为null。

HashSet的顺序不能保证指不能保证load的顺序,一般遍历的顺序与插入的顺序不一致。

新建一个HashSet后,无论遍历几次,遍历的顺序都一样。因为Hashset的遍历顺序是根据存在hashtable中的hashcode来遍历的。

对String这种hashcode生成有规律的,甚至可以预估HashSet遍历的顺序。


6. ArrayList默认初始化容量为10,默认扩容为原来的1.5倍。

    Vector默认初始化容量为10,默认扩容为原来的2倍。Vector还有一个域capacityIncrement,如果大于0,每次增长capacityIncrement,如果小于等于0,增长为原来的2倍。

    AbstractList中有一个域modCount,用来记录List被结构性更改的次数,用于fail-fast遍历。如果expectedModCount和modCount不等,会抛出ConcurrentModificationException。当ensureCapacityInternal被调用,List size被更改是,modCount会加1。即使是list.addAll(new ArrayList());,modCount也会加1。

The number of times this list has been structurally modified. Structural modifications are those that change the size of the list, or otherwise perturb it in such a fashion that iterations in progress may yield incorrect results.


7. HashMap默认初始化容量为16。

    Hashtable默认初始化容量为11。


8. HashMap添加Entry时:

    (1) int hash = hash(key);    // 根据key生成hashcode

    (2) int i = indexFor(hash, table.length);   // 根据key的hashcode和hashtable的长度,生成hashtable的index

            (2.1) static int indexFor(int h, int length) { return h & (length-1); }   // 这就是为什么HashMap的size一定要是2的幂次的原因


9. 创建线程的4种方式:

    (1) class MyThread extends Thread,   new MyThread()

    (2) class MyRunnable extends Runnable,   new Thread(new MyRunnable())

    (3) new Thread(new Runnable() {public void run() {//blabla}})

    (4) new Thread() {public void run() {//blabla}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值