0

我有一个通用类,它应该创建一个存储在数组中的可比较集合。我非常不清楚可比性和泛型的工作方式。

public class OrderedCollection<T extends Comparable<? super T>> 
{
private T collection[]; // the collection
private int size, tempValue; // how many elements currently stored

/**
 * Constructor allocates array and initializes size
 * @param size the number of elements stored
 */
    public OrderedCollection (int capacity) 
    {
    collection = (T[]) new Comparable[capacity];
    size = 0;       
    }
}

首先,集合是什么类型的集合(数组、列表等)。它从未显式实例化为 new Array[] 所以我很好奇这应该如何创建一个数组。

其次,需要一种插入指定值的方法(出于测试目的,我一直使用'5')并将其分配给collection[0]。但是,当我返回 collection[0] 时,它返回为 null。下面是插入方法:

public void insert(T x) 
{
    collection[0] = x;
}

没有什么花哨。对于集合返回 null 的原因以及我应该如何将指定的x值添加到集合中,我将不胜感激。

4

2 回答 2

1

正常的约定是:

private T[] collection;

你的是 C 兼容语法。

public void add(T x) {
    if (size >= collection.length)
        throw new IllegalStateException();
    collection[size] = x;
    ++size;
}

Collection 是任何类型的集合的接口。实现类是 HashTree、ArrayList 等。

这是与其他一些语言的不同之处,Java 没有像 JavaScript 这样的一些“集合”类,而是一些接口,它们具有您可以选择的实现。因此,对于 Map,您可以选择 HashMap、TreeMap、LinkedHashMap 等。所以在API中你放了接口,但是实现使用了一些实现的技术优势。

例如遍历 TreeMap 是按键排序的。LinkedHashMap 的遍历是按插入顺序排列的。

关于 null 一定是编程错误。

于 2013-01-21T20:51:05.887 回答
1

除了 Collection 是什么的问题(在 API 中查找)之外,您发布的代码也可以正常工作。使用一些实现 Comparable 的内置类(如 Integer 或 String)对其进行测试...您可以发布调用 insert() 方法的代码吗?

于 2013-01-21T21:03:11.107 回答