HashMap中存的数据为什么是无序的?存和取的顺序不一样?

  • Post author:
  • Post category:其他




1.简述前提知识



a.

Map

:数据结构基于键值对 Map<k,v>

​ 键值对:k-v

​ 键:存放内容的编号,唯一 key

​ 值:存放的内容 value 旧值被新值覆盖

​ k和v中可写null和空格



b.方法:



名.put(i,m);

i位置上存m



名.get(i);

返回i位置上的值 键找值



名.containsKey(i);

是否能包含此键



名.containsValue(i);

是否能包含此值



名.clear();

清除



c.获取所有键集合

 Set<Integer> set=map.keySet();
//利用iterator输出
 Iterator<Integer> it=set.iterator();
 while(it.hasNext()){
      System.out.println(it.next());
   }



d.获取所有值的集合

  Collection<String> collection=map.values();
//利用iterator输出
    Iterator<String> it1=collection.iterator();
    while(it1.hasNext()){
       System.out.println(it1.next());
      }



e.输出键值映射关系(使用entrySe+iterator和entrySet+for…each) : 遍历

​ entrySe+iterator:

 Set<Map.Entry<Integer,String>> set=map.entrySet();//现将map集合转成set集合
    Iterator<Map.Entry<Integer,String>> it=set.iterator();
    while(it.hasNext()){
         Map.Entry<Integer,String> entry=it.next();   System.out.println(entry.getKey()+"=====>"+entry.getValue());
   }

entrySet+for…each :

for(Map.Entry<Integer,String> m:map.entrySet()){                System.out.println(m.getKey()+"===>"+m.getValue());
}



f.HashMap: 默认初始容量16

​ 方法: 键用不可变的类



g. HashTable:线程安全 同步 默认初始容量11

​ k和v都不能为null



h.TreeMap: k不能为空,v可以为空



2.问题引入和解决


  1. HashMap中存的数据为什么是无序的?存和取的顺序不一样?



    HashMap再存的时候,是按照key的哈希值的顺序进行存储的。


    在这里插入图片描述



3.底层代码

在这里插入图片描述

在这里插入图片描述



版权声明:本文为qq_46603402原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。