1

我想扩展 ArrayList 类来创建一个不包含重复元素的集合,并在内部使用数组进行存储。SetUniqueList存储独特的元素,但我想添加更多功能。

我被困在方法writeObjectreadObject. 这是在ArrayList

private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{
    int expectedModCount = modCount;
    s.defaultWriteObject();

    s.writeInt(elementData.length);

    for (int i=0; i<size; i++)
        s.writeObject(elementData[i]);

    if (modCount != expectedModCount) {
        throw new ConcurrentModificationException();
    }

}

private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException {
    s.defaultReadObject();

    int arrayLength = s.readInt();
    Object[] a = elementData = new Object[arrayLength];

    for (int i=0; i<size; i++)
        a[i] = s.readObject();
}

显然我无法访问private transient Object[] elementData;. 我很困惑我应该创建类ArrayList,而不是扩展它,还是有任何其他的艺术方式来做到这一点?

更新

我需要使用subList以便子列表中的更改反映在此列表中。

4

1 回答 1

1

我可以想到几种方法来实现readObjectwriteObject子类ArrayList

  • 使用反射来调用私有方法ArrayList(讨厌!!但可能是合理的。)。

  • 使用super.iterator()etctera 迭代readObject方法中的元素。


但是,我认为你最好将你的子类ArrayList变成一个包装类,将操作委托给一个真正的ArrayList. 只需确保包装类是Serializable并且包含对包装列表的引用的私有变量未标记为transient。)

一个LinkedHashSet可能是另一种选择......取决于集合的使用方式。

于 2013-06-08T14:19:14.940 回答