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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© anyanyhai 中级黑马   /  2012-3-24 11:21  /  1796 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

HashMap和Hashtable到底有什么区别?
还有定义一个数组:int[] arr={1,3,5};下面就可以用arrays.sort(arr);排序。arrays不是一个集合吗?怎么能直接操作数组?
我对这部分有点晕了。

4 个回复

正序浏览
HashMap不是线程安全的。hashmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。HashTable是线程安全的一个Collection。HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
回复 使用道具 举报
HashMap:底层是哈希表数据结构,允许使用空键,空值,集合不同步,效率高
HashTable: 底层也是哈希表数据结构,不可存入空键空值,不同步
Arrays是集合框架中的工具类,像Calendar,Date等,调用其中的方法直接当工具用可以了
如static void sort(int[] a)
          对指定的 int 型数组按数字升序进行排序。
回复 使用道具 举报
HashMap 是Hashtable 的轻量级实现(非线程安全的实现),他们都完成了Map 接口,主要区别在于HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap 允许将null 作为一个entry 的key 或者value,而Hashtable 不允许。HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey。因为contains方法容易让人引起误解。
Hashtable 继承自Dictionary 类,而HashMap 是Java1.2 引进的Map interface 的一个实现。最大的不同是,Hashtable 的方法是Synchronize 的,而HashMap 不是,在多个线程访问Hashtable 时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。Hashtable 和HashMap 采用的hash/rehash 算法都大概一样,所以性能不会有很大的差异。
Arrays是一个辅助类,此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。

除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。
具体参考API。
回复 使用道具 举报
第一:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),并且最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

第二:Arrayss是java.util包下的一个类,他下面有一系列静态方法,sort()就是提供排序的方法,具体你可以查看api文档。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马