使用HashMap和For迴圈查詢資料並且統計耗費時長
阿新 • • 發佈:2021-02-16
準備一個ArrayList其中存放3000000(三百萬個)Hero物件,其名稱是隨機的,格式是hero-[4位隨機數]
hero-3229
hero-6232
hero-9365
...
因為總數很大,所以幾乎每種都有重複,把名字叫做 hero-5555的所有物件找出來
要求使用兩種辦法來尋找
1. 不使用HashMap,直接使用for迴圈找出來,並統計花費的時間
2. 藉助HashMap,找出結果,並統計花費的時間
package ArrayList; public class Hero { String name; //姓名 float hp; //血量 float armor; //護甲 int moveSpeed; //移動速度 public Hero(){ } public Hero(String name) { this.name=name; } public String toString() { return name; } }
package hashMap; import java.util.ArrayList; import java.util.List; import ArrayList.Hero; import java.util.HashMap; import java.util.Date; public class 練習 { public static void main(String[] args) { List<Hero> randomHero =new ArrayList<>(); for(int i=0;i<3000000;i++) { int randomFigure=(int)(Math.random()*9000+1000); String randomName="hero-"+randomFigure; Hero h=new Hero(randomName); randomHero.add(h); } Long time1=new Date().getTime(); List<Hero> getByFor=new ArrayList<>(); for(Hero heros:randomHero) { if(heros.equals("hero-5555")) { getByFor.add(heros); } } //int range1=getByFor.size(); //System.out.println("for迴圈的查詢結果為:"+range1); System.out.println(getByFor); System.out.println("for迴圈耗費時間:"+(Long)(new Date().getTime()-time1)); Long time2=new Date().getTime(); List<String> getByHashMap=new ArrayList<>(); HashMap<String,String> hashHero = new HashMap<>(); for(int j=0;j<3000000;j++) { int randomFigure=(int)(Math.random()*9000+1000); String randomName="hero-"+randomFigure; hashHero.put(randomName,randomName); } getByHashMap.add(hashHero.get("hero-5555")); //int range2=getByHashMap.size(); //System.out.println("HashMap的查詢結果為:"+range2); System.out.println(getByHashMap); System.out.println("HashMap耗費時間:"+(Long)(new Date().getTime()-time2)); } }
這道題沒有解決出來,不知道為什麼for迴圈查出來的結果永遠是零個,HashMap總是一個。大佬救命...........