2015-07-18 35 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

相关问题