2013-05-15 63 views
0

如何將我的列表items轉換爲CountedItem[]將通用列表轉換爲通用數組

import java.util.LinkedList; 
import java.util.Collections; 
import java.util.Comparator; 

public class CountedSet<E> 
{ 
    LinkedList<CountedItem<E>> items = new LinkedList<CountedItem<E>>(); 
    private final Comparator<CountedItem<E>> comparator = new Comparator<CountedItem<E>>() 
    { 
     @Override 
     public int compare(final CountedItem<E> o1, final CountedItem<E> o2) 
     { 
      return Integer.valueOf(o1.getCount()).compareTo(Integer.valueOf(o2.getCount())); 
     } 
    }; 

    public CountedSet() 
    { 
    } 

    public CountedItem<E> add(E item) 
    { 
     CountedItem<E> currentItem = null; 
     for (CountedItem<E> listItem : items) 
      if (listItem.getItem().equals(item)) 
      { 
       currentItem = listItem; 
       break; 
      } 

     if (currentItem != null) 
      currentItem.increment(); 
     else 
     { 
      currentItem = new CountedItem<E>(item); 
      items.add(currentItem); 
     } 

     return currentItem; 
    } 

    public CountedItem<E>[] getSortedArray() 
    { 
     Collections.sort(items, this.comparator); 

     CountedItem<E>[] array = items.toArraySomeHow(); 
     return array; 
    } 
} 

我沒有太多的細節給你,除此之外我想這樣做在public CountedItem<E>[] getSortedArray()(最後一種方法)。此外,這樣做將導致錯誤:

CountedItem<E>[] array = items.toArray(new CountedItem<E>[items.size()]); 
    // ERROR - Cannot create a generic array of CountedItem<E>.^
+0

java不支持通用數組 – hoaz

+0

而且沒有辦法解決這個問題嗎? – hetelek

+0

http://stackoverflow.com/questions/3617863/java-convert-generic-linkedlist-to-generic-array –

回答

4

您可以使用items.toArray(new CountedItem[items.size()]);與警告。但是在修改之後,你的代碼不乾淨並且不安全。您可以添加@SuppressWarnings("unchecked")來擺脫警告。

這取決於你是否能接受它:)

-1

我不相信你能做到通用數組,但你可以做一個通用的ArrayList。取決於你想要一個數組的原因(加速鏈接列表?),這可能會有所幫助。 ArrayList在內部實現爲Object[]。也許這樣的事情?

public CountedItem<E>[] getSortedArray() 
{ 
    Collections.sort(items, this.comparator); 

    return new ArrayList<E>(items); 
} 
相關問題