2015-07-18 31 views
0

我需要幫助將字符串數組列表「hashNumberStrg」的哈希碼存儲在另一個數組列表中。我的導師希望我們生成100萬個隨機整數,將它們轉換爲字符串,然後獲取每個字符串的哈希碼。有人可以幫助我生成哈希碼並將它們存儲到鏈接列表中嗎?以下是我迄今爲止:如何將字符串數組列表的哈希碼存儲在數組列表中

import java.util.*; 

public class dataStuctures 
{ 

    public static void main(String[] args) 
    { 
    int MAXIMUM = 5;//initializing the maximum integer 
    int MINIMUM = 1;//initializing the minimum integer 

    Random randomGenerator = new Random();//initializing the generation of random integers 

    int range = MAXIMUM - MINIMUM + 1;//setting the range of integers from 1 to 1,000,000 

    ArrayList<Integer> randomNumbers = new ArrayList<Integer>(5);//initializing an ArrayList to store the generated random integers with the capacity of 1,000,000 

    //ArrayList<String> randomNumbersStrg = new ArrayList<String>();//initializing an ArrayList to store store the generated hashcodes into a string 

    for (int index = 1; index <= 5; ++index)//for loop to generate 1,000,000 random integers in a range from 1 to 1,000,000 
    { 
      int randomInt = randomGenerator.nextInt(range) + MINIMUM; 

      randomNumbers.add(randomInt);//storing randomly generated numbers in a vector 


    }//end of for loop for random number generation and storage in an ArrayList 

    System.out.println("random numbers= " + randomNumbers); 
    System.out.println("ArrayList size: " + randomNumbers.size()); 



    ArrayList<String> randomNumbersStrg = new ArrayList<String>(randomNumbers.size()); 
    ArrayList<String> randomNumbersHashCodes = new ArrayList<String>(randomNumbers.size()); 
    for (Integer myInt : randomNumbers) 
    { 
     randomNumbersStrg.add(String.valueOf(myInt)); 
     randomNumbersHashCodes.add(randomNumbersStrg.get(myInt)); 
    } 




    // to test to make sure the integers converted 
    String first = randomNumbersStrg.get(0); 
    System.out.println("hash codeest = " + first.hashCode()); 
    String second = randomNumbersStrg.get(1); 
    String third = randomNumbersStrg.get(2); 
    String fourth = randomNumbersStrg.get(3); 
    String fifth = randomNumbersStrg.get(4); 
    System.out.println("\nfirst = " + first); 
    System.out.println("second = " + second); 
    System.out.println("third = " + third); 
    System.out.println("fourth = " + fourth); 
    System.out.println("fifth = " + fifth); 


    List<String> linkedList = new LinkedList<String>();//initializing Linked List 
    linkedList.addAll(randomNumbersStrg);//adding generated hashcodes to Linked List 







    }//end of main method 

    private static long[] randomNumbers(int index2) 
    { 
    // TODO Auto-generated method stub 
    return null; 
    } 
} 
+1

在java中,每個對象都有一個返回int的hashCode()方法。只需創建另一個ArrayList 並存儲每個字符串的hashCode()的結果。 –

+0

您可以創建另一個數組列表並使用您存儲在原始數組列表中的數字來獲取哈希碼嗎?我可以從數組列表randomNumbersStrg調用字符串嗎? – Cfs0004

+1

你需要一切嗎?我的意思是如果你需要除哈希碼以外的原始數字和這些數字的字符串版本,或者如果你只是使用哈希碼就可以。 –

回答

1

只需使用一個LinkedList存儲哈希碼和ArrayList存儲搜索次數:

List<Integer> hashCodes = new LinkedList<>(); 
for (int index = 0; index < 1_000_000; ++index) { 
    int randomInt = randomGenerator.nextInt(range) + MINIMUM; 
    hashCodes.add(String.valueOf(randomInt).hashCode()); 
} 

這將做它的散列碼。

然後遍歷hashCodes列表來搜索每一個元素,計算需要多長時間:

List<Long> durations = new ArrayList<>(hashCodes.size()); 
for (int n : hashCodes) { 
    long start = System.nanoTime(); 
    hashCodes.contains(n); // true 
    long end = System.nanoTime(); 
    durations.add(end - start); 
} 

這應該這樣做。然後你有durations列表來計算average和std dev。祝你好運!

+1

這個作品完全謝謝你Federico。我現在必須將百萬個散列碼輸入到樹中。任何幫助或鏈接,我可以去找出來?繼承人正是我必須做的:也使用該插入百萬個哈希代碼到樹中。對於每百萬個散列碼,捕獲確定鏈表是否包含散列碼所需的時間。確定用於搜索的樹的時序性能的均值和標準差。然後,使用用於LinkedList的Java容器類確定時序性能的均值和標準差。 – Cfs0004

+0

@ChristopherSchubert對於樹,您必須執行相同的操作,但使用TreeSet而不是'LinkedList'。然後你以完全相同的方式計算搜索持續時間。唯一的區別是Java中的樹實現不允許重複,因此樹的大小將小於列表的大小。 –

+1

謝謝你的幫助Federico。 – Cfs0004

相關問題