2013-04-18 43 views
0

我想從arraylist中獲取值,以便我可以繪製它們,但我無法將它們放入數組中。在這個循環中,我循環訪問已排序的hashmap並嘗試將值存儲在數組中(不起作用)。將arraylist中的單個值存儲到數組中

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); 
+0

你必須首先初始化'v'任何東西,除了空,以使用 –

回答

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]; 

編輯:基本類型的固定處理

+0

對於這兩個,我得到'T他在ArrayList 類型中的方法toArray(T [])不適用於參數(long [])',然後當我取出參數時,它說類型ArrayList 中的方法toArray(T [])不適用於參數(long [])'並且建議將v轉換爲Object [] – user2007843

+0

@ user2007843您是對的。我會刪除答案。 –

1

你不能一個ArrayList分配給這樣的一個數組。也許你可以使用toArray方法:

long v [] = null; 

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

你需要使用'long'而不是'Long'嗎?因爲這裏的區別可以爲你節省循環或實用程序調用。如果你不需要使用原語,那麼不要。 –

0
v = entry.getValue().singleValues.toArray(new long[0]); 
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); 
    } 
} 
+0

海報問題:你需要原始的「長」嗎?如果不是,請更改您的數據類型。問題已解決,因爲其他人已經描述 –

+0

更改爲什麼?我想我也需要改變我的數組列表 – user2007843

+0

我對基督評論的理解是將'long v []'改爲'Long v []',而不是'ArrayList'。 – nashuald

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]; 
}