JAVA:HashMap的使用及与for循环的时间对比

设置一个3000000长度的List,其中list里的内容为“hero-7777”的形式,即"hero-四位数",要求遍历整个list,给出该List里有多少个’‘hero-7777’’(返回数量及位置)

结果:

初始化List成功
HashMap耗时:0
共有多少个(hero-7777)	340

for循环耗时:62
共有多少个(hero-7777)	340
HashMap方法

Map的key为:’’‘hero-四位数字’,值为:该key在list中的位置

public static void Method1(List<String> testList) {
		HashMap<String,List<Integer>> HeroMap = new HashMap<>(); //设置HashMap的形式,key为string类型,value为list类型(value也可以为对象)
		for(int i = 0;i < testList.size();i++){
			List<Integer> listHeroNum = HeroMap.get(testList.get(i).toString()); //判断是否已经存在key
			if(listHeroNum == null){ //若不存在则创建List,并存进HashMap
				listHeroNum = new ArrayList<>();
				HeroMap.put(testList.get(i).toString(), listHeroNum);
			}
			listHeroNum.add(i); //在key对应的value(list)中添加该key在初始List中的位置
		}
		long startTime = System.currentTimeMillis();
		List<Integer> resultMap = HeroMap.get("hero-7777") ;  //查询key
		long endTime = System.currentTimeMillis();
		System.out.println("HashMap耗时:" + (endTime - startTime));
		System.out.println("共有多少个(hero-7777)\t" + resultMap.size());
	}
for循环(迭代器)方法
public static void Method2(List<String> testList) {
		int num =0;
		long startTime = System.currentTimeMillis();
		
		for(String each : testList){
			if (each.equals("hero-7777"))
				num++;				
		}
		long endTime = System.currentTimeMillis();
		System.out.println("for循环耗时:" + (endTime - startTime));
		System.out.println("共有多少个(hero-7777)\t" + num);
	}
主函数

这里的随机数为1000-9999,即

((int)(Math.random()*9000)+1000)

其中手动添加的值是为了防止出现空指针,报错,不想写抛出异常,不出现7777的概率极小

public static void main(String[] args) {
		int numLength = 3000000;
		List<String> testList = new ArrayList<>();
		for(int i = 0;i < numLength;i++)
			testList.add("hero-" + ((int)(Math.random()*9000)+1000));
		System.out.println("初始化List成功");
		testList.add("hero-" + 7777);
		Method1(testList);
		System.out.println("");
		Method2(testList);

你可能感兴趣的:(JAVA学习)