【问题标题】:Point to same element when creating multiple lists创建多个列表时指向同一个元素
【发布时间】:2021-01-25 15:12:03
【问题描述】:

我需要根据这三个对象创建 3 个列表:

{"cat","owl","fish","mouse","elephant"}
{"cat","owl","fish","mouse","elephant"}
{"cat","owl","fish","mouse","elephant"}

如何节省空间使我不指定"mouse", "elephant" 3 次?对象被迭代,我事先并不知道对象包含什么。

// pseudocode

public static List<String> getValuesAsList(myCoolObjects)
    for(MyCoolObject myCoolObject: MyCoolObjects){
    List<String> listContainingObjectValues = new ArrayList<>();
       listContainingObjectvalues.add(myCoolObject.getValue1());
       listContainingObjectvalues.add(myCoolObject.getValue2());
       listContainingObjectvalues.add(myCoolObject.getValue3());
    }
    return listContaingObjectValues;

这样结果就不会是这样的:

List 1 ["cat","mouse","elephant"]
List 2 ["owl","mouse","elephant"]
List 3 ["fish","mouse","elephant"]

想要的结果是这样的:

List 1 ["cat","mouse","elephant"]
List 2 ["owl",*points to 'List 1.[1]', *points to 'List 1.[2]'*]
List 3 ["fish",*points to 'List 1.[1]', *points to 'List 1.[2]'*]

这是 Java 已经在做的事情吗?

【问题讨论】:

  • String 已经是一个引用类型,所以除非你创建明确的副本,否则它已经这样做了
  • 你要使用矩阵[]还是List()?
  • 我基本上要问的是,如果你有这 3 个对象......并从中创建 3 个列表,java 是否会自动为相似的字符串共享相同的内存地址?
  • 您的列表有多长?如果您使用超过 100,000 个项目,我会考虑这种事情。 “过早的优化是万恶之源。” -- 克努斯。

标签: java string list


【解决方案1】:

假设您有一个描述第一列的列表和一个包含其余列值的列表,则可能会生成一个列表列表:

List<String> firstCol = Arrays.asList("cat", "owl", "fish");
List<String> otherCols = Arrays.asList("mouse", "elephant");
    
List<List<String>> lists = firstCol.stream()
                                   .map(col -> Stream.concat(Stream.of(col), otherCols.stream())
                                                     .collect(Collectors.toList())
                                   )
                                   .collect(Collectors.toList());

lists.stream().forEach(System.out::println);

输出:

[cat, mouse, elephant]
[owl, mouse, elephant]
[fish, mouse, elephant]

【讨论】:

  • 查看编辑后的答案。对象已经给我了,我不能影响他们。
  • 不明白。在所需的输出中,您删除了第一个列表中的元素 1 和 2,第二个列表中的元素 0 和 2,第三个中的 0 和 1,并保留第 3、4 列中的元素。然后您声称列表 2 和 3 应该“参考”list1 的内容。那么列表 2 和 3 永远不应该包含自己的数据?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2015-05-09
  • 2017-04-13
相关资源
最近更新 更多