Java 学习笔记
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 学习笔记相关的知识,希望对你有一定的参考价值。
进制相关
十六进制
- 十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
- 0xf表示十进制数15
在java中以0x开头的数表示十六进制数(如0x1, 0xa), 其中以字母a~ f 表示10~15的数字
十进制转十六进制
采余数定理分解,例如将487710转成十六进制:
4877÷16=304…13(D)
304÷16=19…0
19÷16=1…3
1÷16=0…1
这样就计算出4877(10)= 130D(16)
负数转十六进制
- 负数用十六进制表示,通常用的是补码的方式表示.
- 正数的补是它本身;负数的补码是它本身的值每位求反,最后再加一。
例如: 求-3的十六进制
3的十六进制为0003,3求反之后是C,再加1,成D,所以-3的十六进制就是:FFFD
八进制
在java中以0开头的数表示八进制数(如012,03),没有前缀的数才表示十进制数(如123,4)
二进制
- 无符号右移:忽略符号位,空位都以0补齐。value >>> a,a是要移位值 value 移动的位数。无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符>>> 只是对32位和64位的值有意义。右移补零操作符>>>,无论正负,都在高位插入0。
- 有符号右移: 右移位运算符>>,若操作的值为正,则在高位插入0;若值为负,则在高位插入1。
- 负整数转换成二进制
方法:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。还以42为例,负整数就是-42,如图4所示为方法解释。最后即为:(-42)10 =(11010110)
快捷使用
- new int[] {} : 直接创建出来数组
- 快速输入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String tokens[] = s.readLine().split(" "); // 读取一行,分割
int n = Integer.parseInt(tokens[0]);
int m = Integer.parseInt(tokens[1]); - // 数组快速初始化
final int oo = 1000000;
Arrays.fill(dist, oo); - // 重写比较器
class Inflection implements Comparable {
&emsp**;public int compareTo**(Object o) {
Inflection c = (Inflection)o ;
if (a < c.a)
return -1 ;
if (a > c.a)
return 1 ;
return 0 ;
}
}
基本概念
Vector
- Vector类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以根据需要增长或缩小,以适应在创建Vector之后添加和删除项目。默认容量10。
final
- final修饰基本数据类型,一旦初始化比便不能改变,final修饰的引用类型,初始化后不能指向其他对象,但该对象的内容可以改变
- final修饰一个成员变量,必须初始化,一种在声明变量是初始化,另一种声明变量后,在构造方法中初始化
但函数声明为final类型,说明参数是只读类型,不能对参数值进行修改 - final修饰的成员变量表示常量,只能赋值一次,赋值后不再改变
Character
Character.toLowerCase(letter)
将字符变为小写Character.isLetterOrDigit(ch)
Map
- 遍历map:
for (Map.Entry<Integer, Integer> x : map.entrySet()) {
times.add(x.getValue());
}
map.enterSet() 返回对象是Map.Entry<Integer, Integer>
equals与==的比较
一个比较基本数据类型,一个是比较引用数据类型
双等号在比较引用类型的时候主要是比较地址。
当双等号比较的是基本数据类型的时候,比较的数据的值。
equals方法在比较引用类型的时候就是纯粹的再比较值。
equals源码:
//我们知道在Java中,所有的类都是直接或者间接的继承Object类,所以这里传入一个Object类型会比较方便一些
public boolean equals(Object anObject) {
//就是说让s1和s2进行双等号比较,如何二者内存地址相同的话,就会跳出并返回true,如果地址不同,会执行下一个if判断
if (this == anObject) {
return true;
}
//instanceof是对传入值的类型的一个判断,即s2若是String类型的话,返回true,继续执行下面代码,如果不是,跳出返回false
if (anObject instanceof String) {
//把s2转化为String类型
String anotherString = (String)anObject;
//这里省略了this,n指的是s1的长度
int n = value.length;
//判断s1和s2的长度是否相同
if (n == anotherString.value.length) {
//把s1拆分一下,并且把拆分的结果放到v1这个字符数组里,即['m','e','n','g']
char v1[] = value;
//同理,把s2拆分放到数组v2里
char v2[] = anotherString.value;
int i = 0;
//将两个数组的值进行比较,如果有一个不同,则返回false
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
以上是关于Java 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章