如何创建数组元素的副本?

时间:2016-03-04 17:20:42

标签: java data-structures

我在Java中有一个字符串数组,如

  String arr[] = {"A", "B" , "C", "D"};

现在我要做的是从用户那里取任何int数字,例如8,我必须打印对应于该数字的字母。 但是,每次当arr []完成时,#A;#34; = 1," B" = 2," C" = 3," D" = 4,然后在它之后创建数组中每个元素的副本,例如从那里开始计数

  arr[] = {"A","A", "B","B", "C","C", "D","D"}

所以根据现在的数字" A" = 5," A" = 6," B" = 7," B& #34;。= 8

所以应该打印的答案" B"。

类似地,数字的值可以是任何东西,因此它必须创建数组并找到值。

2 个答案:

答案 0 :(得分:1)

我认为你正在尝试做的最好的解决方案是HashMap。 在java中向正常数组添加条目是不可能的,因为它们的大小无法更改。 HashMap提供可扩展性和引用索引的可能性(例如:“potato”=“First-class”,“strawberry”=“Second-class”)等。 关于HashMaps的一点概述:http://javarevisited.blogspot.fr/2011/02/how-hashmap-works-in-java.html

答案 1 :(得分:0)

您不需要实际复制元素,只需要跟踪复制元素的次数。这是一种有效的方法:

public static String selectString(String[] arr, int n) {
    //n--; Add this line if you want n=1 to be the first element, rather than n=0
    int size = arr.length;
    int duplicate = 1;

    while(n >= size) {
        n -= size;
        size *= 2;
        duplicate *= 2;
    }

    return arr[n/duplicate];
}

这是前13的输出:

0:A 1:B 2:C 3:D 4:A 5:A 6:B 7:B 8:C 9:C 10:D 11:D 12:A