将泛型列表转换为泛型数组



如何将列表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);
}

相关内容

  • 没有找到相关文章

最新更新