每日学习笔记(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的幂数),有下面的代码
 
  
  
  
  
  1. if (numElements >= initialCapacity) { 
  2.             initialCapacity = numElements; 
  3.             initialCapacity |= (initialCapacity >>> 1); 
  4.             initialCapacity |= (initialCapacity >>> 2); 
  5.             initialCapacity |= (initialCapacity >>> 4); 
  6.             initialCapacity |= (initialCapacity >>> 8); 
  7.             initialCapacity |= (initialCapacity >>> 16); 
  8.             initialCapacity++; 
  9.   
  10.             if (initialCapacity < 0)   // Too many elements, must back off 
  11.                 initialCapacity >>>= 1;// Good luck allocating 2 ^ 30 elements 
  12.         } 

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

 

 

你可能感兴趣的:(java,java语言,随笔,学习笔记,休闲)