黑马程序员_09HashMap实例

------- android培训ios培训、期待与您交流! ----------
一、HashMap实例说明:添加、查找操作
import java.util.*;
public class TestHashMap{
 public static void main(String args[]){
  HashMap m1=new HashMap();
  HashMap m2=new HashMap();
    //这里map要求必须装两个对象,但从jdk1.5以后可以直接 写成 m1.put("one",1);以下类同。
  m1.put("one",new Integer(8)); 
  m1.put("two",new Integer(10));
  m1.put("three",new Integer(120));
  m2.put("A",new Integer(8));
  m2.put("B",new Integer(12));
  System.out.println(m1.size());
  System.out.println(m1.containsKey("one"));
  System.out.println(m2.containsValue(new Integer(12)));
  if(m2.containsKey("B")){
   int i=((Integer)m2.get("B")).intValue();
   System.out.println(i);
  }
  Map m3=new HashMap(m1);
  m3.putAll(m2);
  System.out.println(m3);   
 }
}

二、HashMap实例:获取输入的单词数量
import java.util.*;
public class TestArgsWord{
 public static final int ONE=1;
 public static void main(String args[]){
  Map m=new HashMap();
  //如果在编程中 没有使用英文输入法输入 时会报 非法字符,不是语句和缺少; 此时就需要检查是不是因为输入字符的问题
  for(int i=0;i<args.length;i++){  
   //m.get[]错误写法,首先提示找不到符号,接着提示不兼容,典型的语法错误;m.put[],
   //也是如此,故一定要注意书写规范,符合语法要求
   Integer freq=(Integer)m.get(args[i]);  
    //这里的写法有多种方式
1、new Integer(freq.intValue()+1) 这是一个对象;
2、freq+1,直接使用自动装箱解箱;
3、freq+new Integer(1)
m.put(args[i],freq==null?ONE:freq+1);
  }
  System.out.println(m.size()+"distinct words found");
  System.out.println(m);
 }
}

三、HashMap实现原理:HashMap的数据结构

       数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。

      数组
        数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难

        链表
        链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。

        哈希表
        
那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。哈希表((Hash table既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便

       哈希表是由 数组+链表组成的,HashMap是由一个线性的数组实现的,可以理解为其存储数据的容器就是一个线性数组。我们很不解,一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理,在HashMap里面实现一个静态内部类 Entry,其重要的属性有  key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Entry[]里面。

        具体详解可参见:http://blog.csdn.net/vking_wang/article/details/14166593

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值