网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java2中的collections框架--map     
  文章作者:未知  文章来源:水木森林  
  查看:74次  录入:管理员--2007-11-17  
 
  public interface java.util.map {
  
    //altering methods
     public object put(object key, object value);  
     public object remove(object key);       
     public void putall(java.util.map);      
     public void clear(); 
  
    //querying methods
     public object get(object key);     
     public int size();          
     public boolean isempty();         
     public boolean containskey(object);     
     public boolean containsvalue(object);     
     public boolean equals(object);        
  
    //viewing methods
     public java.util.set keyset();         //gets keys
     public java.util.collection values();      //gets values
     public java.util.set entryset();        //gets mappings
  
     public static interface java.util.map.entry {  //a map-entry (single key/value pair)
       public object getkey();          //returns current entry key
       public object getvalue();         //returns current entry value
      public object setvalue(object value);   
   public boolean equals(object);      
   public int hashcode();             }
  }
  map接口提供了方便易用的方法,通过这些方法可以查询、查看、修改当前map的内容。注意对于map接口的keyset()方法返回一个set,set是collection接口的一个扩展,包含不重复的一组对象。因为map中的key是不可重复的,所以得到所有key的keyset()方法返回一个set对象。map接口本身还包含了一个map.entry接口,一个map.entry就是map中的一个关键字/值对。map接口中的entryset()方法就返回了一个集合对象,其中每一个元素都实现了map.entry接口。map接口的get(object key),put(object key,object value),和remove(object key)方法都有同一个问题。他们的返回类型都是object,当返回null时,可以猜测为调用那个方法前那个key不存在。但是只有在null不允许作为map的值时可以这样猜测。所有map接口的通用实现都允许null作为key或者value,这就说当返回一个null值,就可以意味着很多事情。只是因为通用实现允许null值,你不能下那个映射有null值的结论。如果你确知没有null值,那返回null值就意味着调用那个方法前,映射里并没有那个键。否则,你必须调用containskey(object key)来看看那个key是否存在。
  
  hashtable
  
  java.util.hashtable实现了map接口,在hashtable中使用key对象的hashcode()作为对应的对象的相对存储地址,以便实现根据关键字快速查找对象的功能。所以只有一个实现了hashcode()和equals()方法的对象才可作为hashtable的key。null值不能作为关键字或值。
  public class java.util.hashtable extends dictionary implements cloneable, map, serializable {
  
     //hashtable constructors
     //construct a default hashtable with default capacity and load of 0.75
     public hashtable();          
     //construct a hashtable with passed capacity and default load of 0.75
     public hashtable (int initialcapacity);
     //construct hashtable with passed capacity and load
     public hashtable(int initialcapacity, float load);
     //construct hashtable with passed mapping
     public hashtable(map);         
    
     //hashtable specific methods
     //checks if object is in hashtable
     public boolean contains(object);    
     //returns enumeration of elements in hashtable
     public enumeration elements();     
     //returns enumeration of keys in hashtable
     public enumeration keys();       
     //creates shallow copy of hashtable(structure copied, but not key/values)
     public object clone();         
     //prints out key/value pairs of hashtable elements
     public string tostring();       
     //reorganizes all elements in hashtable, and increases hashtable capacity
     protected void rehash();        
    
     //get value from passed in key
     public object get(object);       
     //insert key/value pair
     public object put(object key, object value);   
  
  }
  hashtable是java 2集合框架推出之前的一个老的工具类,在新的java 2集合框架下,已经被hashmap取代。hashtable和hashmap的区别主要是前者是同步的,后者是快速失败机制保证不会出现多线程并发错误(fast-fail)。在初始化一个hashtable时,可以指定两个参数:初始容量、负荷,这两个参数强烈的影响着hashtable的性能。容量是指对象的个数,负荷是指散列表中的实际存储的对象个数和容量的比率。如果初始容量太小,那么hashtable需要不断的扩容并rehash(),而这是很耗时的;如果初始容量太大,又会造成空间的浪费。负荷则相反,负荷太小会造成空间浪费,负荷太大又会耗时(因为这会造成较多的关键字的散列码重复,hashtable使用一个链接表来存储这些重复散列码的对象)。容量的缺省值是11,负荷的缺省值是0.75,一般情况下你都可以使用缺省值来生成一个hashtable。另外,在hashtable中的大部分的方法都是同步的。
  
  hashmap
  
  hashmap基本实现了map接口的全部方法。方法的签名大家看上面的map接口。这儿主要说说几个map接口中的方法。
  按照集合框架的实现,哈希表是单链表作为元素的数组,有着同样索引值的两个或更多入口被一起链结到单链表中。哈希表声明如下:
    private entry[] table;
  组件类型entry是map.entry接口的实现,map.entry声明于map接口内。下边是map.entry接口的简化实现:
    private static class entry implements map.entry{
      int hashcode;
      object key;
      object value;
      entry next;
  
      entry(int hashcode,object key,object value,entry next){
        this.hashcode=hashcode;
        this.key=key;
        this.value=value;
        this.next=next;
  }
  public object getkey(){
    return key;
  }
  public object getvalue(){
    return value;
  }
  public object setvalue(object value){
    object oldvalue=this.value;
    this.value=value;
    return oldvalue;
  }
  }
 
 
上一篇: java学习推荐书籍    下一篇: 有感javaisnotplatform-independent,itistheplatform
  相关文档
使用特定的包在java中高效处理日志记录 11-17
ibm承诺今年年底发布代号为atlantic的开发平台 11-17
使用java操作文本文件 11-17
java教程 第三讲 java语言中的面向对象特性 11-17
jpa重整orm山河 11-17
java入门:初学者因该了解内存优化编程 12-28
javascript实例教程(12) 鼠标移过时报警 11-16
实例:jsp结合xml+xslt将输出转换html 11-16
j2ee综合--hibernate的事务处理机制 01-15
jsp针对各种流行数据库的连接方法 11-17
.net里的哈希表和串行化的简单介绍 11-17
web.xml 常用结点说明[1] 11-17
java的破解和反破解 11-17
java语言深入:如何编写安全的java代码 12-28
ejb是如何封装事务逻辑的? 11-17
5分钟内在fedora linux上安装jdk6/java se 6 11-17
.net应用程序的授权模型使系统更易管理 11-17
简单的例子把oo的javascript说明白 11-16
技术分享 配置eclipse进行远程调试二(图) 11-17
grails + ejb domain models 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息