1. ホーム
  2. java

[解決済み] java.lang.IndexOutOfBoundsException: ソースがdestに収まりません。

2023-07-09 12:01:10

質問

以下のコードについて。

static void findSubsets (ArrayList<Integer> numbers, int amount, int index)
{
    ArrayList <Integer> numbersCopy = new ArrayList<Integer>(numbers.size());
    Collections.copy(numbersCopy, numbers);
}

エラーが発生するのですが。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
        at java.util.Collections.copy(Collections.java:548)
        at backtracking2.Main.findSubsets(Main.java:61)

なぜ?

どのように解決するのか?

容量と大きさはイコールではありません。渡すsizeパラメータは、単にサイズに応じた十分なメモリを確保するものです。実は、この要件は、要素を定義しているわけではありません。 Collections.copy しかし、それでも1つなのです。

から重要な部分です。 Collections.copy ジャバドックス :

デスティネーションリストは、少なくともソースリストと同じ長さである必要があります。それ以上であれば、デスティネーションリストの残りの要素は影響を受けません。

を渡すだけでよい。 List になります。 ArrayList のコンストラクタを使用して、すべての List を、完全に回避することができます。