1. Line 53: java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
string.split("\\+") ,split + 或 * 等符号时需在前面用\\
contains 不需要这样。
2. 3sum我的思路是把用arraylist把每个unique的数字put into a list。具体的看code。
3. 两个reverse list 相加 不要忘了 5+5 = 10的carry。
4. basic calc2 记得先split +,- instead of * /,一定先split +。// FORGET ABOUT IT
basic calc2用stack。然后记得char的数字->int时一定要减去'0' (0的ascii value)。
5. arr = new arr[size]; arrlist.toArray(arr); // wrong
List<String> javaList = Arrays.asList(arr); //此方法返回的List不能add,remove对象,因为该方法的实现是使用参数引用的数组的大小来new的一个ArrayList,对返回列表的更改会“直写”到数组,而数组没有add,remove方法。
6.
Collections.sort(listB,new Comparator<B>(){ @Override public int compare(B b1, B b2) { return b1.getOrder().compareTo(b2.getOrder()); } })7. bitjava中有三种移位运算符
<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐
i = i >>>1; <=> i >>>=1;
value >>> num -- num 指定要移位值value 移动的位数。
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符>>> 只是对32位和64位的值有意义
>>>
逻辑右移,这个才是和<<对应的
~ 按位非(NOT)
& 按位与(AND)
| 按位或(OR)
^ 按位异或(XOR)
>> 右移
>>> 无符号右移
<<左移
前面几个都非常简单,主要是移位操作比较容易出错.
首先要搞清楚参与运算的数的位数,如int的是32位。long的是64位。
如int i = 1;
i的二进制原码表示为:
00000000000000000000000000000001
long l = 1;
l的二进制原码表示为:
0000000000000000000000000000000000000000000000000000000000000001
正数没有反码、补码,也可以说正数的反码、补码跟原码一样。
负数的反码为原码逐位取反,
如int i = -1;
10000000000000000000000000000001,最高位是符号位。正数为0,负数为1。
逐位取反后:
01111111111111111111111111111110即反码。
反码加1:
01111111111111111111111111111111即补码。
负数都是用补码参与运算的。得到的也是补码,需要减1取反获得原码。
8.
1. Line 53: java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
string.split("\\+") ,split + 或 * 等符号时需在前面用\\
contains 不需要这样。
2. 3sum我的思路是把用arraylist把每个unique的数字put into a list。具体的看code。
3. 两个reverse list 相加 不要忘了 5+5 = 10的carry。
4. basic calc2 记得先split +,- instead of * /,一定先split +。// FORGET ABOUT IT
basic calc2用stack。然后记得char的数字->int时一定要减去'0' (0的ascii value)。
5. arr = new arr[size]; arrlist.toArray(arr); // wrong
List<String> javaList = Arrays.asList(arr); //此方法返回的List不能add,remove对象,因为该方法的实现是使用参数引用的数组的大小来new的一个ArrayList,对返回列表的更改会“直写”到数组,而数组没有add,remove方法。
6.
Collections.sort(listB,new Comparator<B>(){ @Override public int compare(B b1, B b2) { return b1.getOrder().compareTo(b2.getOrder()); } })7. bitjava中有三种移位运算符
<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐
i = i >>>1; <=> i >>>=1;
value >>> num -- num 指定要移位值value 移动的位数。
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符>>> 只是对32位和64位的值有意义
>>>
逻辑右移,这个才是和<<对应的
~ 按位非(NOT)
& 按位与(AND)
| 按位或(OR)
^ 按位异或(XOR)
>> 右移
>>> 无符号右移
<<左移
前面几个都非常简单,主要是移位操作比较容易出错.
首先要搞清楚参与运算的数的位数,如int的是32位。long的是64位。
如int i = 1;
i的二进制原码表示为:
00000000000000000000000000000001
long l = 1;
l的二进制原码表示为:
0000000000000000000000000000000000000000000000000000000000000001
正数没有反码、补码,也可以说正数的反码、补码跟原码一样。
负数的反码为原码逐位取反,
如int i = -1;
10000000000000000000000000000001,最高位是符号位。正数为0,负数为1。
逐位取反后:
01111111111111111111111111111110即反码。
反码加1:
01111111111111111111111111111111即补码。
负数都是用补码参与运算的。得到的也是补码,需要减1取反获得原码。
8.
