将arraylist中的单个值存储到数组中

时间:2013-04-18 18:44:15

标签: java arrays hashmap

我想从arraylist获取值,以便我可以绘制它们但我无法将它们放入数组中。在这个循环中,我循环遍历排序的hashmap并尝试将值存储在数组中(不起作用)。

long v [] = null;

for(Map.Entry<String,NumberHolder> entry : entries)
{
       v = entry.getValue().singleValues;
}

这是我的NumberHolder类

private static class NumberHolder
{
    public int occurrences = 0;
    public int sumtime_in_milliseconds = 0; 
    public ArrayList<Long> singleValues = new ArrayList<Long>();
}

我最终想要一个填充单个值的数组,以便我可以绘制它。

修改

这就是我现在所拥有的,Eclipse给了我这个永无止境的错误建议,将我的数组转换为Object[],这使我在使用dataset.addSeries图表时遇到问题。

for(Map.Entry<String,NumberHolder> entry : entries)
{ 
   graphMaker(entry.getValue().occurrences,entry.getValue().singleValues.toArray());
}                                        


public static void graphMaker(int totalValues, Object[] objects)
{

    int bin = 1000;
    HistogramDataset dataset = new HistogramDataset();
    dataset.setType(HistogramType.RELATIVE_FREQUENCY);
    dataset.addSeries("Histogram",objects,bin, 0, 120000);

5 个答案:

答案 0 :(得分:1)

您不能像这样将ArrayList分配给数组。也许你可以使用toArray方法:

long v [] = null;

for(Map.Entry<String,NumberHolder> entry : entries)
{
   v = entry.getValue().singleValues.toArray(new long[0]);
}

答案 1 :(得分:0)

非常简单:

final ArrayList<Long> t = entry.getValue().singleValues;
v = new long[t.size()];
for (int i = 0; i < v.length; ++i) v[i] = t.get[i];

编辑:原始类型的固定处理

答案 2 :(得分:0)

v = entry.getValue().singleValues.toArray(new long[0]);

答案 3 :(得分:0)

您无法直接执行此操作,因为long不等于Long

您可以使用Apache Commons Lang Library。有一个名为ArrayUtils的类,它有一个名为toPrimitive的函数。

如果你使用该功能,你可以这样做:

for(Map.Entry<String,NumberHolder> entry : entries)
{
   v = ArrayUtils.toPrimitive(entry.getValue().singleValues.toArray(new Long[0]));
}

或者,如果您不想使用该库,则可以执行以下操作:

for(Map.Entry<String,NumberHolder> entry : entries)
{
   v = new long[entry.getValue().singleValues.size()];
   for (int i=0; i<v.length; i++) {
       v[i]=entry.getValue().singleValues.get(i);
   }
}

答案 4 :(得分:0)

尝试以下方法:

Set<Long> values = new HashSet<Long>();
Iterator<NumberHolder> it = entries.keySet().iterator();
while(it.hasNext()) {
    NumberHolder numberHolder = it.next();
    values.addAll(numberHolder.singleValues;
}
Long[] v1 = values.toArray();
// transform to primitive long array
long[] v = new long[v1.size()];
for(int i = 0; i < v1.size(); i++) {
    v[i] = v1[i];
}