每日学习笔记(16)

在看jdk里的collection framework这部分,小结一下: 

1, Arrays.copyOf, System.arraycopy这两个方法用得非常多。

2, 比较两个 Object是否相等

if (o1==null ? o2 == null : o1.equals(o2))

3, equals方法一般写法

       Public Boolean equals(Object o) {

              If (o == this) return true;

              If ( ! (o instanceof List) return false;

              //比较具体数据大小

       }

4,Iterator 一定要会用

5,延迟初始化一定要用

6,写clone 方法一般写法

Public Object clone()

{

//step 1: super.clone()得到一个基本对象

//step 2: 对基本对象的各个值域进行设置


}

7,布尔变量对多个数据进行测试

boolean modified = false; modified |= remove(i.next());

8,transient和 volatile的用法

9,在ArrayDeque里面,为了找到最合适的大小(2的幂数),有下面的代码

 

    if  (numElements  >=  initialCapacity) {
            initialCapacity  =  numElements;
            initialCapacity  |=  (initialCapacity  >>>   1 );
            initialCapacity  |=  (initialCapacity  >>>   2 );
            initialCapacity  |=  (initialCapacity  >>>   4 );
            initialCapacity  |=  (initialCapacity  >>>   8 );
            initialCapacity  |=  (initialCapacity  >>>   16 );
            initialCapacity ++ ;
 
             if  (initialCapacity  <   0 )    //  Too many elements, must back off
                initialCapacity  >>>=   1 ; //  Good luck allocating 2 ^ 30 elements
        }

 

10,删除掉的对象一定要设置为null,让GC去做剩余的清理工作

11,对double和float,一定要调用Double.doubleToLongBits和Float.floatToIntBits来做处理

12,Arrays.java里的排序算法,当数组长度小于7,则用插入排序,否则用快速排序和归并排序

13, Collections.java里的排序,都是先把集合转为数组,然后对数组进行排序,最后将排序后的数组元素放回集合中

14, 一般设计锁的时候可以考虑用单独的锁对象,或者是当前类,或者是this对象

15,null转变为Null值对象

16,用反射来生成新数组

        if (a.length < n) {

       a = (T[])java.lang.reflect.Array

           .newInstance(a.getClass().getComponentType(), n);

17,为了防止更改参数中的对象,一般参数都声明为final,然后在函数内部还可以用clone方法做一个拷贝,对拷贝进行操作。

18,HashMap的内部实现是一个桶数组,每个桶是一个Entry链表。调用get函数来获取一个元素时,首先对key的hash值进行hash运算,然后利用得到的hash值对桶数组进行索引,得到其所在的桶,然后从这个桶的首元素开始遍历比较

19,HashMap和Hashtable的区别就是,它不是线程安全的,而且允许null键和null值

20,HashSet的底层实现是一个HashMap<E,Object>,当放一个对象时,值部分是一个Null对象 Object PRESENT = new Object();

21,和序列化有关的readObject方法和writeObject方法还需要进一步研究

22,Hashtable.java里的再哈希函数rehash,是先new一个新大小的桶数组,然后对原来的老桶数组里的元素,利用新容量做hash得到其在新桶里的索引,然后将其插入为其所在桶链表的首元素

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值