Java集合之Map接口

Map使用键值对来存储数据,将键映射到值对象,一个映射不能包含重复的键,每一个键最多只能映射到一个值。Map接口的具体实现类:HashMap,Hashtable,TreeMap,LinkedHashMap

  1)HashMap

  基于哈希表(哈希表学习地址)的Map接口实现。允许使用null值和null键,不保证映射的顺序,特别是不保证顺序恒久不变。它除了非同步和允许使用null外,与Hashtable大致相同。

  HashMap实现原理:

  1.HashMap默认数组大小为16,加载因子为0.75,当数组使用量达到数组长度*加载因子时,需要进行扩充。

  2.HashMap是以数组为头,连接链表形成的(要计算key的hashcode值),根据散列值求出对象在哈希表的存储位置,相同位置上的多个数据以链表方式连接,每次先加入的对象放进链表头。

  

  示例代码:

  Java代码

  1. publicstaticvoidmain(String[] args){

  2. Map<Integer, String>maps=newHashMap<Integer, String>();

  3. maps.put(1,"小黑");

  4. maps.put(2,"小白");

  5. maps.put(null,null);

  6. maps.put(10, "老王");

  7. System.out.println("size: "+maps.size());

  8. //根据key获取对象值

  9. System.out.println(maps.get(10));

  10. //是否存在此键

  11. System.out.println(maps.containsKey(2));

  12. //是否存在此值

  13. System.out.println(maps.containsValue(null));

  14. //遍历

  15. Set<Entry<Integer,String>>entry=maps.entrySet();

  16. Iterator<Entry<Integer,String>>iter=entry.iterator();

  17. while(iter.hasNext())

  18. {

  19. System.out.println(iter.next());

  20. }

  21. //清除map

  22. maps.clear();

  23. }

  HashMap是线程不安全的,非同步的,当需要重新散列时,数组扩大为原来的两倍,将会把所有数据重新进行插入,此时可能会破换原来的顺序,所有HashMap不能保证映射顺序。HaspMap的重新散列会影响性能。

  2)Hashtable

  此类实现了哈希表,该哈希表将键映射到相对应的值。任何非null都可以用作键或值,为了成功的在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals方法。

  用法基本和HashMap相同,不过多介绍

  HashMap和Hashtable的区别

  1.HashMap可以使用null作为键或值,Hashtable不可以

  2.HashMap是非同步的,线程不安全,而Hashtable是同步的,线程安全

  3.Hashtable的默认容量为11,而HashM的默认容量为16。

  3)TreeMap

  基于红黑树显示的,该映射根据其键的自然排序进行排序,或者根据创建映射时提供的Comparator进行排序。所以,TreeMap使用自定义类作为key时要实现Comparable接口。

  如:

  自定义Person类,实现Comparable接口。使用age属性进行排序

  Java代码

  1. publicclassPerson implementsComparable<Person>{

  2. publicString name;

  3. publicintage;

  4. publicPerson(String name,intage)

  5. {

  6. this.name=name;

  7. this.age=age;

  8. }

  9. publicintcompareTo(Person o) {

  10. if(o==null)

  11. thrownewNullPointerException();

  12. if(this.age>o.age)

  13. return1;

  14. if(this.age<o.age)

  15. return-1;

  16. return0;

  17. }

  18. @Override

  19. publicString toString() {

  20. return"Person [name="+ name + ", age="+ age + "]";

  21. }

  22. }

  调用代码:

  Java代码

  1. publicstaticvoidmain(String[] args){

  2. Map<Integer, String>maps=newTreeMap<Integer, String>();

  3. maps.put(1,"小黑");

  4. maps.put(2,"小白");

  5. maps.put(10, "老王");

  6. //遍历

  7. Set<Entry<Integer,String>>entry=maps.entrySet();

  8. Iterator<Entry<Integer,String>>iter=entry.iterator();

  9. while(iter.hasNext())

  10. {

  11. System.out.println(iter.next());

  12. }

  13. //清除map

  14. maps.clear();

  15. //-----------------------------使用自定义Person做key

  16. Map<Person, String>map=newTreeMap<Person, String>();

  17. map.put(newPerson("xiaobai", 20), "xiaobai");

  18. map.put(newPerson("xiaohei", 18), "xiaohei");

  19. map.put(newPerson("xiaohong", 30), "xiaohong");

  20. //遍历

  21. Set<Entry<Person,String>>entry1=map.entrySet();

  22. Iterator<Entry<Person,String>>iter1=entry1.iterator();

  23. while(iter1.hasNext())

  24. {

  25. System.out.println(iter1.next());

  26. }

  27. //清除map

  28. map.clear();

  29. }

  运行结果:

  

技术分享: www.kaige123.com

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java中map接口hashMap以及Enty之间的用法和关系

java中map接口hashMap以及Enty之间的转换首先说的是map接口:Map提供了一种映射关系,其中的元素是以键值对(keyvalue)的形式存储的,能够实现根据key快速查找value;建(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个建最多只能映射到一个值。Ma

HashMap的实现原理

HashMap概述HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap的数据结构在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数

HashMap1.7和1.8,红黑树原理!

jdk1.7概述HashMap基于Map接口实现,元素以键值对的方式存储,并允许使用null键和null值,但只能有一个键作为null,因为key不允许重复,另外HashMap不能保证放入元素的数据,它是无序的,和放入的顺序并不能相同,HashMap是线程不安全的。继承关系publicclassH