黑马程序员技术交流社区

标题: HashTable ,没那么简单? [打印本页]

作者: 江公亮    时间: 2013-3-24 21:10
标题: HashTable ,没那么简单?
本帖最后由 江公亮 于 2013-3-26 17:07 编辑
  1. import java.util.Hashtable;
  2. import java.util.Random;

  3. class count{
  4. int i=1;
  5. public String toString(){
  6. return Integer.toString(i);
  7. }
  8. }

  9. public class UseHashTable {

  10. /**
  11. * @param args
  12. */
  13. private static final int REPS=100;
  14. public static void main(String[] args) {
  15. // TODO Auto-generated method stub
  16. Hashtable ta=new Hashtable();
  17. Random random =new Random();
  18. int index=1;

  19. while(index<=REPS){
  20. Integer k=new Integer(random.nextInt(10)+1);
  21. if(ta.containsKey(k)){
  22. <FONT color=red>((count)ta.get(k)).i++;</FONT>
  23. }
  24. else{
  25. ta.put(k, new count());
  26. }
  27. index++;
  28. }
  29. System.out.println(ta);
  30. }

  31. }
复制代码
上面那段代码,是在java编程思想中看到的,觉得很好,就copy过来,和大家一起分享。
功能是为了统计1到10,每个数字各出现多次,
我觉得有几点非常重要,1、Hashtable ,只能容纳对象,但不能容纳基本数据类型,
                                       2、一旦需要用HashTable容纳数字,就必须用Integer进行封装,用Integer封装时,
                                            我们便不能再度改变它的值了,这也是要设计一个count类的原因
                                       3、最重要的是,散列表是用对象的散列码(也就是对象的内存地址,作为键值)进行查找的,这样速度很快。但这样也有潜在的危险,当你在两次创建同一样的对象时(有一个对象已经存进HashTable的键中),也就是两个对象的散列码不一致,我们并不能在Hashtable,找到那个一样的对象,这样我们就必须重写Object的hashcode()和equal方法,来使的对象唯一。可以查看Java编程思想226--228

作者: lucy198921    时间: 2013-3-24 23:25
谢谢分享.

Hashtable就是哈希表,下面这个示例创建了一个数字的哈希表。
它将数字的名称用作键:  
 
Hashtable<String, Integer> numbers = new Hashtable<String, Integer>();  
 numbers.put("one", 1);  
 numbers.put("two", 2);  
 numbers.put("three", 3);   

如果要获取一个数字,可以使用以下代码:
  Integer n = numbers.get("two");  
 if (n != null) {  
 System.out.println("two = " + n);  
 }
作者: 江公亮    时间: 2013-3-25 10:13
numbers.put("put",1);虽然放的是1,但泛型会自动对1进行封装啊,可能这也是泛型的作用吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2