`

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

    博客分类:
  • j2se
 
阅读更多

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

  • 大小: 172.1 KB
  • 大小: 214.9 KB
  • 大小: 177.5 KB
分享到:
评论

相关推荐

    HashMap和Hashtable的区别

    Hashmap是开发中用的比较多的一种集合,是线程不安全的,Hashtable的方法上大多都加了synchronized所以是线程安全的,所以效率并不高。这也是它们最大的不同。  2.Hashtable继承的类和实现的接口:(Dictionary类...

    浅析Java中Map与HashMap,Hashtable,HashSet的区别

    HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对(key-value对);HashSet则实现了Set接口,性质类似于集合

    Java中的小知识 —- Map集合

    2. Map集合以Key和Value这种键值对的方式存储元素,所有Map集合的Key特点:无序不可重复 3. Key和value都是存储Java对象的内存地址 4.所有Map集合的key特点:无序不可重复。Map集合中的key和set集合存储元素特点相同...

    实验05 Java集合.doc

    4)了解Map接口及主要实现类(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 ...

    Java集合框架完整说明便于了解集合

    HashMap 和 Hashtable 的区别,HashSet如何检查重复,HashMap的底层实现,HashMap 多线程操作导致死循环问题,ConcurrentHashMap 和 Hashtable 的区别,ConcurrentHashMap线程安全的具体实现⽅式/底层具体实现,...

    java summary(java笔记)

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap...

    Java集合框架源码剖析:HashSet 和 HashMap

     HashMap实现了Map接口,允许放入null元素,除该类未实现同步外,其余跟Hashtable大致相同,跟TreeMap不同,该容器不保证元素顺序,根据需要该容器可能会对元素重新哈希,元素的顺序也会被重新打散,因此不同时间...

    JAVA面试题最全集

    数组和集合 6.文件和目录(I/O)操作 如何列出某个目录下的所有文件 如何列出某个目录下的所有子目录 判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现...

    Java Map 按照Value排序的实现方法

    Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。这篇文章主要介绍了Java Map 按照Value排序的实现方法,需要的朋友可以参考下

    实验七:Java集合与泛型

    本次实验掌握了集合的概念、体系结构、分类及使用场景,了解了Set接口及主要实现类(HashSet、TreeSet),了解了解List接口及主要实现类(ArrayList、LinkedList、Vector),掌握ArrayList的使用及其与Vector的区别,...

    Java 最常见的 208 道面试题:第二模块答案

    Java 最常见的 208 道面试题:第二模块答案 18. java 容器都有哪些?...30. 哪些集合类是线程安全的? 31. 迭代器 Iterator 是什么? 32. Iterator 怎么使用?有什么特点? 33. Iterator 和 ListIterator 有什么区别?

    Java 基础核心总结 +经典算法大全.rar

    Collections 类集合实现类特征图 泛形 泛型的使用 用泛型表示类 用泛型表示接口泛型方法 泛型通配符 反射 Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 枚举和普通类-样枚举神秘之处 枚举类 I/O File...

    超级有影响力霸气的Java面试题大全文档

    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary...

    进销存系统文档作业例子

    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary...

    Android 对Map按key和value分别排序的实例

    Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。 TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射...

    关于JAVA面试的100题及其答案

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap...

    Java基础部分 Java代码查错算法与编程html&JavaScript&ajax部分面试题

    60、HashMap和Hashtable的区别 2 61、List 和 Map 区别? 2 62、List, Set, Map是否继承自Collection接口? 2 63、List、Map、Set三个接口,存取元素时,各有什么特点? 2 64、说出ArrayList,Vector, LinkedList的存储...

    Java面试题.docx

    29、HashMap和HashTable的区别 30、HashMap与HashSet的区别 31-40题 31、HashSet与HashMap怎么判断集合元素重复? 33、ArrayList和LinkedList的区别,以及应用场景 34、数组和链表的区别 35、开启线程的三种...

    大数据面试题.pdf

    Hashtable 是 Dictionary 的⼦类,HashMap 是 Map 接⼝的⼀个实现类。 1-9)使⽤ StringBuffer ⽽不是 String 当需要对字符串进⾏操作时,使⽤ StringBuffer ⽽不是 String,String 是 read-only 的,如果对它进⾏...

    java面试宝典

    98、Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 22 99、说下Hibernate的缓存机制 22 100、Hibernate的查询方式 23 101、如何优化Hibernate? 23 102、Struts工作机制?为什么要使用Struts? 23 ...

Global site tag (gtag.js) - Google Analytics