使用列表还是集合更好?

2022-09-01 03:41:32

我有一个对象,它将一些数据存储在列表中。实现可能会在以后更改,我不想向最终用户公开内部实现。但是,用户必须能够修改和访问此数据集合。目前我有这样的东西:

public List<SomeDataType> getData() {
   return this.data;
}

public void setData(List<SomeDataType> data) {
   this.data = data;
}

这是否意味着我允许内部实现细节泄露出去?我应该这样做吗?

public Collection<SomeDataType> getData() {
   return this.data;
}

public void setData(Collection<SomeDataType> data) {
   this.data = new ArrayList<SomeDataType>(data);
}

答案 1

这取决于,您是否希望您的用户能够索引到数据中?如果是,请使用列表。两者都是接口,所以你不会泄露实现细节,真的,你只需要决定所需的最小功能。


答案 2

返回列表与编程到最合适的接口一致。

返回集合会给用户带来多义性,因为返回的集合可以是:Set、List 或 Queue。