如何将列表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>. ^
可以使用带有警告的items.toArray(new CountedItem[items.size()]);
。但是修改后的代码不干净,类型也不安全。
你也可以添加@SuppressWarnings("unchecked")
来摆脱警告。
你能不能接受就看你自己了
我不相信你可以做泛型数组,但你可以做一个泛型数组列表。这取决于您为什么需要一个数组(比链表更快?),这可能会有所帮助。ArrayList在内部实现为Object[]
。也许是这样的?
public CountedItem<E>[] getSortedArray()
{
Collections.sort(items, this.comparator);
return new ArrayList<E>(items);
}