第一:初步认识map
1.键值对(key与value是一一映射,hashMap容器保存的是映射关系)key用set存储(因为key不能重复),value用list存储(因为value能重复),这个两个元素存在映射关系
2.put方法:在集合中添加一个键和一个值。
3.遍历map,遍历的时候只需要遍历出键就行了,因此map.keyset得到键,在map.get(key)得到对应的值
4.当保存的对象的键值相同的时候就把以前的覆盖了
5.get方法是取值,但是map对象的键不是挨着的,因此要找到键 的集合。键的集合的返回值是set类型的数据
6.当键是个student对象的时候(或者在这时候键里面写的是字符串,反正不是基础数据类型的就行),这时候遍历键的时候返回值是个hashset类型的。因此如果想使用这个键的集合的contains方法或者remove方法就要重写hashcope方法和equals方法
7.键一般用String类型的,因为String类把该重写的方法都重写过了,如果用int类型的,还得自己手动重写
第二:比较Hashtable实现类和HashMap实现类
1.Hashtable中的方法是同步的(),而HashMap中的方法在默认情况下不是同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决
2.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。Hashtable的键值不能为null,否则报空指针异常:java.lang.NullPointerException
3.HashTable使用Enumeration,HashMap使用Iterator。以上只是表面的不同,它们的实现也有很大的不同。
4.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
5.哈希值的使用不同,HashTable直接使用对象的hashCode,而HashMap重新计算hash值,而且用与代替求模,比如HashMap的put方法
参看地址:http://www.jb51.net/article/35523.htm
第三:总结集合框架
1.所有集合里面都没有重写object的equals方法和tostring方法,所有集合都有迭代器方法
2.TreeSet依赖(重写)的是comperTo方法,HashSet依赖(重写)的是Hashcope和equals方法
3.以前学过的list集合是有下标的,现在set没有下标了,怎么办,怎么排序?
对于set接口中的Treeset实现类,他里面重写了comperTo方法。如果想实现用Treeset成功添加对象,那么就继承comperable接口就行(因为此时调用接口默认的比较方法),如果想遍历这个集合,那么就要给集合一个规则,遍历的时候是怎么遍历出来的(因为没有下标,所以不知道怎么遍历处理),那就是重写comperable接口中的comperTo方法,里面写出按年龄排序的规则,对于set接口中的HashSet实现类,他里面有桶(也就是hashcope和equals方法)
4.set接口中没有get方法(get是根据索引找对象的),那我们怎么遍历呢?这时候引出了迭代器
5.list集合中的remove方法的返回值是个对象,而set集合中的remove方法的返回值是一个Boolean类型的(true或者false)
6.在list接口中的remove方法和contains方法中都会调用重写后的equals方法,而set接口中的remove和contains方法则是调用重写后的comperTo方法
7,hashcope默认的返回是哈希值,这个值是int类型的,这个int就相当于内存的地址,当我们重写了hashcope以后,就是比较对象的各个属性值了
8.当hashcope的值一样的情况下,有以下两种情况:
(1).当hashcope方法是判断所有的属性,那么hashcope值一样就表明所有的属性都一样,也就是对象的内容一样
(2).当hashcope方法是判断部分属性的时候,只要这部分属性的hashcope值一样就表明这两个对象的内容一样。
因此:只有在hashcope一样的情况下,不同的对象才会放入同一个桶中(相同对象就不要了),也就是说一个桶中的东西,hashcope的值(某一个值)是一样的。
为什么是某一个值呢?因为只有某一个值一样了才会进行调用equals方法。如果全部值都一样那就不用添加这个重复对象了
9.remove和contains方法也会用到hashcope方法,因为要先找到在哪个桶中,才能进行下一步的操作
相关推荐
在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...
Map接口用于保存具有key-value映射关系的数据,常见的Map实现包括HashMap、TreeMap、HashTable和LinkedHashMap等。Queue是Java提供的队列实现。 本文总结了HashMap和HashTable的源码学习和面试总结,涵盖了它们的...
`HashMap` 和 `HashTable` 都是 Java 集合框架中非常重要的数据结构,它们都实现了 `Map` 接口,用于存储键值对。尽管它们在功能上有很多相似之处,但在实现细节和性能特性上存在显著差异。 #### 二、主要区别 1. ...
2. **HashMap**:`HashMap` 则是在 Java 1.2 版本中引入的,它是 `Map` 接口的一个具体实现类。相比于 `Hashtable`,`HashMap` 在设计上更为灵活,并且支持更高的性能。 #### 二、同步性 - **Hashtable**:所有的...
在Java编程中,HashMap是一个非常常用的集合类,用于存储键值对数据。然而,它存在一个重要的特性,那就是线程不安全。理解这个问题并找到解决方案是每个Java开发者必须掌握的知识。 HashMap线程不安全的原因主要...
Hashtable和HashMap的区别在于,Hashtable是一个同步的Map实现类,而HashMap是一个非同步的Map实现类。因为同步需要花费机器时间,所以Hashtable的执行效率要低于HashMap。 Collection框架是Java容器类的基础,它...
- `HashTable`继承自`Dictionary`类,而`HashMap`实现了`Map`接口,这反映了Java集合框架的发展历史,`Map`接口提供了更现代和灵活的API设计。 - `HashTable`的一些方法名使用了过时的命名约定,如`elements()`和`...
与HashSet的区别在于,HashSet是基于HashMap实现的集合类,用于存储唯一对象。HashSet中的元素没有顺序,添加元素时,HashSet会将元素转化为键放入HashMap中。因此,HashSet的插入和查找速度与HashMap相当,但由于...
HashMap, HashTable, LinkedHashMap, TreeMap 的区别 在 Java 中,Map 是一个非常...HashMap, HashTable, LinkedHashMap, TreeMap 四种 Map 实现类各有其特点和用途,选择合适的 Map 实现类需要根据实际情况进行考虑。
HashMap 和 Hashtable 是 Java 集合框架中两个重要的映射数据结构,它们都实现了 Map 接口,但具有显著的差异。以下将详细介绍这两个类的主要区别: 1. 线程安全性: - HashMap 不是线程安全的,这意味着在多线程...
HashTable是早期的同步Map实现,它不允许键和值为null。与HashMap相比,HashTable的同步特性使得它在多线程环境下更安全,但在单线程环境下,由于同步开销,其性能较低。 5. LinkedList与ArrayList的比较 ...
本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, `TreeMap`以及`HashTable`之间的区别。 #### 1. HashMap `HashMap`是一种基于哈希表实现的`Map`接口,提供了一个非同步的、允许使用`null`键和...
在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别是ArrayList,基于动态数组...
Hashtable和HashMap是Java中常用的Map实现类,它们提供了key-value型的存储方式。Hashtable和HashMap的主要区别在于Hashtable使用了synchronized方法,线程安全,而HashMap则没有。Hashtable和HashMap都提供了put、...
Map集合的这些实现类在不同的场景下具有不同的性能特点和用途。例如,HashMap在大多数情况下使用,因为它提供了最快的查找性能;TreeMap用于当你需要按键排序的时候;而ConcurrentHashMap则用于高度并发的环境。了解...
Map 的实现类有 Hashtable、HashMap、LinkedHashMap 和 TreeMap。Hashtable 是一种线程安全的哈希表,HashMap 是一种线程不安全的哈希表,LinkedHashMap 是一种链表哈希表,TreeMap 是一种树形哈希表。 在实际应用...
在Java编程语言中,`HashMap`和`HashTable`是两种常用的集合类,它们都是用于存储键值对的数据结构。这两个类都实现了`Map`接口,但它们之间存在一些显著的区别,这些差异主要体现在线程安全性、null值处理、迭代...
`HashMap`、`Hashtable`和`HashSet`都是基于`Map`或`Set`接口实现的不同数据结构,它们在功能、线程安全性和性能等方面有显著差异。 首先,`HashMap`和`Hashtable`都实现了`Map`接口,这意味着它们都可以存储键值对...
Map 有三个实现类:HashMap、HashTable 和 TreeMap。HashMap 是一个基于哈希表的集合类,HashTable 是一个线程安全的基于哈希表的集合类,TreeMap 是一个基于树形结构的集合类。 三、Collections Collections 是 ...
Map集合的主要实现类有HashMap、Hashtable、TreeMap等。HashMap是哈希表实现的,key不能重复,但是value可以重复。Hashtable是线程安全的,key和value不能为null。TreeMap是对key排好序的Map,key必须实现Comparable...