Java谜题6——库谜题
谜题56:大问题 | 谜题57:名字里有什么? | 谜题58:产生它的散列码 | 谜题59:什么是差? | 谜题60:一行的方法 | 谜题61:日期游戏 | 谜题62:名字游戏 |
谜题63:更多同样的问题 | 谜题64:按余数编组 | 谜题65:一种疑似排序的惊人传奇
通过上面的链接大家可以在上面的的为网站上看到《Java Puzzlers》的详细文章,在此仅将学习的重点做下总结:
关于库:
谜题56
解释:BigInteger实例是不可变的。String、BigDecimal以及包装器类型:Integer、Long、Short、Byte、Character、Boolean、Float和Double也是如此,
你不能修改它们的值。我们不能修改现有实例的值,对这些类型的操作将返回新的实例。为了在一个包含对不可变对象引用的变量上执行计算,我们
需要将计算的结果赋值给该变量。
方法如下: BigInteger fiveThousand = new BigInteger("5000");
教训:不要被误导,认为不可变类型是可变的。这是一个在刚入门的Java程序员中很常见的错误。公正地说,
Java不可变类型的某些方法名促使我们走上了歧途。像add、subtract和negate之类的名字似乎是在暗
示这些方法将修改它们所调用的实例。也许plus、minus和negation才是更好的名字。
谜题57
解释: 使用set方法时,注意,如果定义的类覆写了equals()方法时,就一定要覆写hashcode()方法,因为每次
使用set存储实例或是调用,都需要hashcode方法比较数据。
教训:当你覆写equals方法时,一定要记着覆写hashCode方法。更一般地讲,当你在覆写一个方法时,如果它具
有一个通用的约定,那么你一定要遵守它。对于大多数在Object中声明的非final的方法,都需要注意这一
点[EJ Chapter 3]。不采用这项建议就会导致任意的、不确定的行为。
谜题58
解释:这个程序的缺陷与谜题57中的缺陷很相似,在谜题57中,Name覆写了equals方法,但是没有覆写hashCode方法;而在本谜题中,Name覆写了hashCode方
法,但是没有覆写equals方法。这并不是说Name没有声明一个equals方法,它确实声明了,但是那是个错误的声明。Name类声明了一个参数类型是Name
&n
相关文档:
javac
用法:javac <选项> <源文件>
其中,可能的选项包括:
-g   ......
直接选择排序算法:从待排序的数据元素集合中选取最小的元素放到原始数据的第一个元素的位置上。然后不包括第一个元素的数据元素集合中找到最小的元素放到此集合中,依次类推,即可完成排序。
算法实现如下:
/**
* 直接选择排序
* @param a 用于排序的数组
* */
public void ......
public class Test {
public static void main(String aa[]) {
if (System.getProperty("os.name").equals("Linux")) {
System.out.println("linux");
} else if (System.getProperty("os.name").equals("Windows XP")) {
System.out.println("win ......
Java编程,能够高手速成吗?我觉的是可以的。Java的知识点比较多,或者说,非常多;但仔细梳理一遍,我们会发现一些规律。通过这些规律可以分析,哪些Java知识是需要深入挖掘的,哪些是可以浅尝辄止的。
《Java编程思想》, ......
1、 继承和实现区别
Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
2、 线程安全不同
HashTable的方法是同步的,HashMap是未同步,所以在多线程场合要手动同步HashMap。
3、 对null的处理不同
HashTable不允许null值(key和value都不可以),HashMap允许n ......