主页 > 国内 >

我想和你唱_java集合框架之HashMap

?参考http://how2j.cn/k/collection/collection-hashmap/365.html#nowhere

HashMap的键值对

HashMap储存数据的方式是—— 键值对

HashMap de jian zhi dui HashMap chu cun shu ju de fang shi shi jian zhi dui

package collection;
   
import java.util.HashMap;
   
public class TestCollection {
    public static void main(String[] args) {
        HashMap dictionary = new HashMap<>();
        dictionary.put("adc", "物理英雄");
        dictionary.put("apc", "魔法英雄");
        dictionary.put("t", "坦克");
         
        System.out.println(dictionary.get("t"));
    }
}

键不能重复,值可以重复

对于HashMap而言,key是唯一的,不可以重复的。
所以,以相同的key 把不同的value插入到 Map中会导致旧元素被覆盖,只留下最后插入的元素。
不过,同一个对象可以作为值插入到map中,只要对应的key不一样

遍历HashMap几种方式

//第一种:普遍使用,二次取值
 System.out.println("通过Map.keySet遍历key和value:");
 for (String key : map.keySet()) {
  System.out.println("key= "+ key + " and value= " + map.get(key));
 }
  
 //第二种
 System.out.println("通过Map.entrySet使用iterator遍历key和value:");
 Iterator<>> it = map.entrySet().iterator();
 while (it.hasNext()) {
  Map.Entry entry = it.next();
  System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
 }
  
 //第三种:推荐,尤其是容量大时
 System.out.println("通过Map.entrySet遍历key和value");
 for (Map.Entry entry : map.entrySet()) {
  System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
 }
 
 //第四种
 System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
 for (String v : map.values()) {
  System.out.println("value= " + v);
 }
}

查找内容性能比较

准备一个ArrayList其中存放3000000(三百万个)Hero对象,其名称是随机的,格式是hero-[4位随机数]
hero-3229
hero-6232
hero-9365
...
因为总数很大,所以几乎每种都有重复,把名字叫做 hero-5555的所有对象找出来
要求使用两种办法来寻找
1. 不使用HashMap,直接使用for循环找出来,并统计花费的时间
2. 借助HashMap,找出结果,并统计花费的时间

package swordOffer;

import java.util.*;

public class test {
    public static void main(String[] args) {
        ArrayList arrayList=new ArrayList<>();
        //初始化
        for (int i=0;i<3000000;i++){
            Hero hero=new Hero();
            String str=String.valueOf(Math.random()*9000+1000).substring(0,4);
            hero.setName("hero-"+str);
            arrayList.add(hero);
        }

        test(arrayList,"hero-5555");
        testHashMap(arrayList,"hero-5555");

    }

    private static void test(ArrayList arrayList,String key){

        long timeBegin=System.currentTimeMillis();
        int count=0;
        for (Hero hero:arrayList){
            if(hero.getName().equals(key)){
                count++;
            }
        }
        long timeEnd=System.currentTimeMillis();
        System.out.println("没有使用HashMap:ArrayList其中存放3000000(三百万个)Hero对象,其名称是随机的,格式是hero-[4位随机数],把名字叫做 hero-5555的所有对象找出来用时:"+(timeEnd-timeBegin)+"毫秒;共有"+count+"个hero-5555");
    }

    private static void testHashMap(ArrayList arrayList,String key){

        long timeBegin=System.currentTimeMillis();
        HashMap<>> resultList=new HashMap<>();
        for (Hero hero:arrayList){
            if(resultList.get(hero.getName())!=null){
                ArrayList list=resultList.get(hero.getName());
                list.add(hero);
                resultList.put(hero.getName(),list);
            }else{
                ArrayList list=new ArrayList();
                list.add(hero);
                resultList.put(hero.getName(),list);
            }
        }
        long timeEnd=System.currentTimeMillis();
        System.out.println("使用HashMap:ArrayList其中存放3000000(三百万个)Hero对象,其名称是随机的,格式是hero-[4位随机数],把名字叫做 hero-5555的所有对象找出来用时:"+(timeEnd-timeBegin)+"毫秒;共有"+resultList.get(key).size()+"个hero-5555");
    }
}

class Hero {

    private String name;

    public Hero(){}

    public Hero(String name){
        name=name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

class ADHero extends Hero {

}

由此可见,不使用HashMap,只用for循环 比 使用HashMap 快12倍

当前文章:http://www.pow-pr.com/g73re/130340-188712-68531.html

发布时间:00:13:31

222232香港赛马会官网??今期家婆玄机彩图今晚??中金心水论坛??太阳神论坛??香港马会六和开奖结果??2019管家管婆24特马王??155655黄大仙救世网??香港马会开奖资料??www.57909.com??黄大仙开奖??

相关文章
推荐图文
最热文章