List.add(list)和List.add(stringbuilder.toString)的区别

时间:2020-10-27 22:51:39

标签: java algorithm deep-copy n-queens

我正在研究N皇后问题和生成括号问题。

当您想要一个List<List<Integer>>作为结果,并且想要向其中添加List<Integer>时,您需要进行深度复制吗?像result.add(new ArrayList<Integer>(cur))

但是,如果您希望将List<String>作为结果,则可以执行result.add(sb.toString())。 为什么将stringbuilder.toString添加到列表中不需要深层副本?

谢谢您的时间

以下是代码的一部分。它们是递归函数的基本情况。

N个皇后区:

 public void helper(int n, List<Integer> cur, List<List<Integer>> result){
    if (cur.size() == n){
      **result.add(new ArrayList<Integer>(cur));**
      return;
    }

生成括号:

 private void helper(int n, StringBuilder sb, int left, int right, List<String> result) {
    if (sb.length() == n * 2){
      **result.add(sb.toString());**
    }

1 个答案:

答案 0 :(得分:0)

您无法在Java本身中实现深度复制,如果需要,则必须手动实现它。

但是对于Java中不可变的字段,复制始终被视为深度复制。我们正在谈论的是原语:int,byte,..和String。