1. 大量判定是否
思路:通过二进制表示是否,结合位运算
2. 数据转换
2.1 数字与byte[]的等值转换
/**
* Created by Kami Wan on 2015/12/17.
*/
public class Radix {
public static void main(String[] args) {
/*
将其他进制表示的字符串转化成十进制内容
*/
System.out.println(Integer.valueOf("10",16)); //16进制的10代表的是十进制当中的16,返回int
System.out.println(Integer.parseInt("A",16)); //16进制的A代表的是十进制当中的10,返回Integer
System.out.println(Long.parseLong("B",16)); //16进制的B代表的是十进制当中的11,返回Long
/*
将十进制表示的内容转化成二进制的字符串
*/
System.out.println(Integer.toBinaryString(16)); //结果为10000,二进制表示的16,返回值是String
}
}
3. 处理大数字
用BigDecimal或者BigInteger类,用字符串可以初始化。常量有ONE,TEN和ZERO
4. 基本数据类型
首先可以先看下这篇文章解惑下。
/**
* Created by Kami Wan on 2015/12/17.
*/
public class TestInteger {
public static void main(String[] args) {
Integer a = 1;
Integer b = 1;
Integer c = 200;
Integer d = 200;
System.out.println(a==b);
System.out.println(c==d);
}
}
true
false
这个就是基本数据类型和包装类里面的一个坑。int赋值给Integer的Integer.valueof()自动装箱。如果Integer赋值给int类型则使用intValue()方法。我们来看下Intger.valueOf(int)的源码
public static Integer valueOf(int i){
if(i >= -128 && i<=IntergerCache.high)
return IntegerCache.cache[i+128]
else
return new Integer(i);
}
IntegerCache.high默认是127。由源码可知,在[-128,127]这个范围内是有缓存的,缓存的值有相同的内存地址。
其他数据类型使用valueOf()自动装箱的时候,也会有类似的情况
- Boolean的true和false都在cache中
- Byte的256个值全部在cache中
- Short、Long两种类型的cache范围为]-128,127]
- Float、Double没有cache
其他扩散内容:
5. 集合
集合是老生常谈的东西,我这里仅仅罗列下我看书时刚领悟的。
- 已知List长度的时候,实例化ArrayList的时候可以带上长度
- List太大的时候,注意可以分段处理,避免OOM
- 思索常见的框架用到了什么集合类
6. 常见目录与工具包
6.1 java.util.Collections和java.util.Arrays
有很多不错的API提供,例如
List<String> list = new ArrayList<String>();
list.add("a");
lsit.add("b");
lsit.add("c");
这种语句可以替换成
List<String> list = Arrays.asList("a","b","c");
6.2 Comparator和Comparable接口
Comparable比较固定和不灵活,和对象捆绑在一起。Comparator比较灵活,是个比较器,谁都可以用。定义好比较规则了,可以给不同的对象使用。例如在Arrary.sort(list,comparator)中第二个参数就可以代入一个比较器。比如中文排序可以使用Collator.getInstance(java.util.Locale.CHINA)这个比较器