map集合和他的实现类hasHmap(不安全)和hashTable(安全)

第一:初步认识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方法,因为要先找到在哪个桶中,才能进行下一步的操作

你可能感兴趣的:(map集合和他的实现类hasHmap(不安全)和hashTable(安全))