零碎笔记(二)

来源:互联网 发布:java interrupt sleep 编辑:程序博客网 时间:2024/05/29 06:33
列举一些常用的算法,希望能有一定的参考价值.
1.判断一个正整数是否事2的幂
boolean is2Power(int x){     return (x &(x-1))==0;}
x&(x-1)就是把x的最右边的一个1位变为0位,如果x为2的幂,那么就只有一个位为1,返回的结果就是0了.
注意:x必须为正整数,0也不可以.

2.判断一个正整数是否是2^n-1的形式
boolean is2PowerOne(int x){     return x &(x+1);}


3.判断一个正整数是否事2^j-2^k的形式,j>k>=0.

boolean is2PowerJK(int x){     return (((x|(x-1))+1)&x)==0;}
首先要明白要满足2j-2k的形式,x中为1的位必须连续,也就是这个样子的 00...01..10...0,明白了这一点就好办了,x-1就是改变最右边的1位以及后面的,也就是10...0变成01...1,高位不变.x|(x-1)使得x的尾0都变成了1,最后的形式是:000...011..1这个已经是2n-1的形式了,只要套用 x&(x+1)公式就可以了.
当j=k+1时,就变成了公式1了.
当k=0时,就变成公式2了.

4.求一个整数的绝对值.
int abs(int x){    return x-((x<<1)&(x>>31));}
当n为0时:x<<1=0,x>>31=0,结果为0.
当n为正:x>>31为0,结果为x.
当n为负:x>>31为全1,也就是-1,x-(x<<1)等于-n
不过注意的是:当Integer.MIN_VALUE<n<-230该公式不行,因为这个时候x<<1溢出了.
当x为Integer.MIN_VALUE时,返回Integer.MIN_VALUE,这个是对的.

最佳的互换操作:
A = A ^ B;
B = A ^ B;
A = A ^ B;


Java 判断字符串是否为空的三种方法
   1:if(s == null || s.equals(""));
      直观, 方便, 但效率很低.
   2:if(s == null || s.length() <= 0);
      比较字符串长度, 效率高.
   3:if(s == null || s.isEmpty());
      Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等.
   注意:if(strNewsFileName==null||strNewsFileName=="")改为if(null==strNewsFileName||"".equal(strNewsFileName)) 防止空指针或者直接用StringUtils的静态方法。< import org.apache.commons.lang.StringUtils; >


一些常用的正则表达式示例:
1、匹配所有的正数:^[0-9]+$
2、匹配所有的小数:^\-?[0-9]*\.?[0-9]*$
3、匹配所有的整数:^\-?[0-9]+$
4、提取信息中的中文字符串: [\u4e00-\u9fa5]* ;  
5、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
6、提取信息中的中国手机号码:(86)*0*13\d{9}
7、提取信息中的中国固定电话号码:(\d3,4|\d{3,4}-|\s)?\d{8}
8、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
9、提取信息中的中国身份证号码:\d{18}|\d{15}
10、提取信息中的任何数字:(-?\d*)(\.\d+)?
11、匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*)\/>/


每个Classloader运行过程,加载流程:
//检查类是否已被装载过(从cache中)Class c = findLoadedClass(name);if(c == null) { //指定类未被装载过    try{        if (parent != null){//如果父类加载器不为空,则委派给父类加载            c = parent.loadClass(name, false);        }else{//如果父类加载器为空,则委派给启动类加载器加载            c = findBootstrapClass0(name);        }    }catch (ClassNotFoundException e){        //启动类加载器或父类加载器抛出异常后,        //当前类加载器将其捕获,并通过findClass方法,由自身加载        c = findClass(name);    }}


0 0