您的位置:首页 > Web前端

剑指offer(2)

2016-02-29 21:48 281 查看

Chapter2

q2:Java中的数据类型?及其内存大小

八种类型:

short(2)int(4)21亿 long(8)

float(4) double (8)

boolean

byte(1) -128~127

char(2)

java用的是Unicode编码 ,Unicode编码是16位二进制

初始化char的方式

char ch1 = 'E';
char ch1 = 69;
char ch3 = '\u0045';

这三个char的都是大写字母E,其中ch3是Unicode码

Unicode码是16位二进制,也就是4位16进制 ch3就是 \u+四位16进制数

69的16进制就是45!

Q1:如何为自定义的一个类覆盖其
equals()
方法

参考1

重写equals方法,要注意遵循五个原则:自反性,对称性,传递性,非空性,一致性

重写equals方法的一般方法

使用==操作符检查“实参是否为指向对象的一个引用”。

使用instanceof操作符检查“实参是否为正确的类型”。

把实参转换到正确的类型。

对于该类中每一个“关键”域,检查实参中的域与当前对象中对应的域值是否匹配。

对于既不是float也不是double类型的基本类型的域,可以使用==操作符进行比较;

对于对象引用类型的域,可以递归地调用所引用的对象的equals方法;

对于float类型的域,先使用Float.floatToIntBits转换成int类型的值,然后使用==操作符比较int类型的值;对于double类型的域,先使用Double.doubleToLongBits转换成long类型的值,然后使用==操作符比较long类型的值。

@Override public boolean equals(Object obj){    if(obj==this){         return true;    }     if(!(obj instanceof Point)){         return false;     }     Point p = (Point) obj;     return p.x==this.x && p.y==this.y; }


参考2

其实equals方法和hashCode方法是紧密相关的

String的hashCode的算法就是把每一个char的值乘以31,作累加

Q2:Singleton单例模式的实现

参考

Q3:在排序的二维数组中查找指定数字

数组在内存中是连续的,所以通过下标读写元素的时间复杂度是O(1)

使用数组实现哈希表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: