代码片

作者: luckee | 来源:发表于2019-01-18 22:00 被阅读0次

    确保其他线程都结束,然后自己才结束

    while(Thread.activeCount() > 1) {
      Thread.yeild();
    }
    

    防止书写错误

    if(null == obj)if(obj == null)作用都是一样的,但是前者可以避免写成obj = null的错误

    避免空指针

    "hello".equals(str)str.equals("hello"),前者可以避免空指针

    定义参数个数可变的方法

    • 通过数组包装
    private static int sum( int[] values) { 
    } 
    
    • 省略号
    private static int sum( int... values) { 
    } 
    

    判断是否是2的幂次方

    public static boolean isPowerOf2(int n) {
      return (n & -n) == n
    }
    

    说明:以整形正数为例,如果一个数是2的幂次方,那么其最高位(指非0最高位)肯定为1,且其他位为0,形如0000...10000...;计算机计算数值是用数值的补码,正数的补码是本身,负数的补码是对应的正数全部位按位取反再加1,那么0000...10000...按位取反得到形如1111...01111...,再加1得到形如1111...10000...,然后0000...10000...1111...10000...按位与得到000...10000...,等于本身

    求模运算技巧

    计算机对于数值的计算是用补码的形式,而且CPU直接支持位运算。一般都是n%a的形式来求模,但如果a是2的幂次方,我们可以写成n & (a - 1)的形式来求模,&比%快很多,a - 1必然是0000...111...(低位是x位1)的形式,n & (a - 1)就可以得到n的低x位了,这低x位就是我们要求的余数。jdk的HashMap(数组+链表+红黑树实现)在添加元素时确定元素的插入位置就使用了这个技巧,要求容量capacity(即桶的数量,也是数组的长度,注意装载因子的计算是size/capacity)必须是2的幂次方,对key求得hash码之后,对capacity进行求模运算,就得到元素应该插入的位置

    static final int hash(Object key) {
            int h;
            return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
        }
        
        i = (table.length - 1) & hash;//这一步是在后面添加元素putVal()方法中进行位置的确定
    

    打印异常类名,行号等信息

    public class Test1 {
    
        public static void main(String args[]) {
            System.out.println(getLineInfo());
            getExp();
        }
    
        public static String getLineInfo() {
            StackTraceElement ste = new Throwable().getStackTrace()[1];
            return ste.getFileName() + ": Line " + ste.getLineNumber();
        }
    
        public static String getExp(){
            try{
                throw new Exception("Exception Test");
            }catch(Exception e){
                StackTraceElement ste =e.getStackTrace()[0];
                System.out.println(ste.getClassName());
                System.out.println(ste.getFileName());
                System.out.println(ste.getLineNumber());
                System.out.println(ste.getMethodName());
            }
            return null;
        }
    }
    

    相关文章

      网友评论

          本文标题:代码片

          本文链接:https://www.haomeiwen.com/subject/mdmodqtx.html