gpt4 book ai didi

java - 我可以在不复制的情况下包装 List 对象吗?

转载 作者:行者123 更新时间:2023-11-30 06:36:11 24 4
gpt4 key购买 nike

我有一个List<List<Object>> ,但我不想总是在使用它的地方写出来,这也增加了可读性。所以我想将它包装在一个名为 ValueSheet 的对象中。
这就是我所做的,但它会产生巨大的开销,因为它创建了列表的副本,这是不必要的:

public class ValueSheet extends ArrayList<List<Object>> {

public ValueSheet(List<List<Object>> values) {
super(values);
}

}

是否可以在没有开销的情况下做到这一点,同时保留该对象是 List<List<Object>> 的事实?这意味着我不是在寻找这个:

public class ValueSheet {

List<List<Object>> values;

public ValueSheet(List<List<Object>> values) {
this.values = values;
}

}

PS:不,我无法实例化 ValueSheet直接,因为List<List<Object>>由外部来源提供。

最佳答案

ArrayList 并不是真正为扩展而设计的。它的父类AbstractList是为扩展而设计的,它可能适合您的目的。这是一个最小的例子:

public class ValueSheet extends AbstractList<List<Object>> {

private final List<List<Object>> values;

ValueSheet(List<List<Object>> values) {
this.values = values;
}

@Override
public List<Object> get(int index) {
return values.get(index);
}

@Override
public int size() {
return values.size();
}
}

请注意,调用修改列表的方法将抛出UnsupportedOperationException。如果您需要其中任何一种方法,您需要自己重写并实现它们。(它可以像委托(delegate)给底层列表一样简单。)

关于java - 我可以在不复制的情况下包装 List 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45175389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com