A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 江公亮 中级黑马   /  2013-3-24 21:10  /  1320 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 江公亮 于 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

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

2 个回复

倒序浏览
谢谢分享.

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);  
 }

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
numbers.put("put",1);虽然放的是1,但泛型会自动对1进行封装啊,可能这也是泛型的作用吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马