java - 操作集合的最佳实践

标签 java collections

以下情况: 我创建了一些方法,允许我操作列表。举个简单的例子,这些方法是 addSomeElements(...) 和 removeSomeElements(...)

调用这些方法的最佳方法是什么?我知道以下方法可以做到这一点,但不知道哪一个最好?!

1)重新初始化列表

private void doSomething(List<String> list) {
   list = addSomeElements(list); 
   list = removeSomeElements(list);
}

在这种情况下,方法当然必须返回一个列表:

private List<String> addSomeElements(List<String> list) {
    list.add(...);
    return list;
}

2)创建新变量

private void doSomething(List<String> list) {
   final List<String> list2 = addSomeElements(list); 
   final List<String> list3 = removeSomeElements(list2);
}

private List<String> addSomeElements(List<String> list) {
    final List<String> newList = new ArrayList<String>(list);
    newList.add(...);
    return newList;
}

3)使用 void 方法

private void doSomething(List<String> list) {
   addSomeElements(list); 
   removeSomeElements(list);
}

private void addSomeElements(List<String> list) {
    list.add(...);
}

这将是最简单的方法,但我不太喜欢它,因为我认为对于用户来说,你在做什么并不总是显而易见的。例如,如果您有一个 int,您可以将其声明为 int myInt = 0。当您想要更改该值时,您可以直接说 myInt = 1。很明显,myInt 现在有了一个新值。但有了 list 就不一样了。您想要更改的列表可能只是您想要调用来修改列表的方法的几个参数之一。如果方法的命名没有告诉用户,用户可能不会意识到您已经修改了列表,该列表似乎只是一个参数。

这里“最干净”的方法是什么?

最佳答案

如果您要修改传递到方法中的列表,请不要返回列表引用(您的选项#1和选项#2自编辑后);它在 API 级别给人的印象是您正在创建一个列表,而不是修改给您的列表。

这给您留下了两个选择,其中任何一个都是“最佳实践”,具体取决于上下文:

  1. 修改传入的列表,并使用 void 方法(或在适当的情况下完全返回其他内容的方法)。 (这是你的选项#3。)

  2. 通过添加/删除创建新列表,并返回对新列表的引用。 (这就像您编辑的选项 #2,但请注意,您还必须从 doSomething 返回 list3 才能使其有意义。 )

关于java - 操作集合的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35433073/

相关文章:

java - 如何在没有 XML 文件的情况下使屏幕可滚动?

java - 在 kubernetes 平台上的 spring-cloud-dataflow 中创建调度程序时出现 NullPointerException

perl 中 system() 命令的 java 等价物

java - 当这些是对象时,如何根据映射的值而不是键对映射进行排序?

java - 如何使用 Rally 的 JAVA API 将标签添加到 Rally 中的测试用例?

java - 如何将对象类型的数组向下转换为普通数组?

java - 将来自 json 响应的数组字符串存储在 Realm 中

java - Collections.unmodifiableList(list) 是否需要锁?

java - 我如何在 Java 8 中组合/合并两个列表映射 (Map<String, Map<Enum, List<String>>>)

java - 为什么这里会抛出NullPointerException?