8

一番上の答えに示されているように、コードでArrays.asList()。contains()メソッドを使用しています:配列に特定の値が含まれているかどうかをテストするにはどうすればよいですか?、コードでArrays.asList()を使用します。

ただし、コンパイラはこの次のコードを拒否します。参照型ではなく、素数配列にプリミティブを使用しているためですか?オートボクシングのせいでそうは思いませんが、確認したかっただけです。

import java.math.*;
import java.util.ArrayList;
import java.util.Arrays;

public class .... {
    public static void main(String[] args) {
        int[] primes = formPrimes(15);
        ArrayList<Integer> primes1 = new ArrayList<Integer>(Arrays.asList(primes));
        // Rest of code...
    }

    public static int[] formPrimes(int n) {
        // Code that returns an array of integers
    }
}

エラーが1つあり、シンボルエラーが見つかりません。

シンボル:コンストラクターArrayList(java.util.List)

場所:クラスjava.util.ArrayList ArrayList primes1 = new ArrayList(Arrays.asList(primes));

基本的に、整数の配列を返す関数があり、それを配列リストに変換したいのですが、ArrayListコンストラクターの使用で問題が発生しています。

4

3 に答える 3

10

はい。オートボクシングは配列には適用されず、プリミティブにのみ適用されます。

私が日食で得るエラーは The constructor ArrayList<Integer>(List<int[]>) is undefined

これは、ArrayListのコンストラクターがとして定義されているためですpublic ArrayList(Collection<? extends E> c)。ご覧のとおり、コレクションのサブタイプのみを受け入れますが、intは受け入れません。

コードを次のように変更するだけです。

public class .... {
    public static void main(String[] args) {
        Integer[] primes = formPrimes(15);
        ArrayList<Integer> primes1 = new ArrayList<Integer>(Arrays.asList(primes));
        // Rest of code...
    }

    public static Integer[] formPrimes(int n) {
        // Code that returns an array of integers
    }
}

から整数配列を返すと仮定すると、すべてうまくいくはずですfromPrimes

Andrewのコメントから更新 し、Arrays.asListのソースを調べた後:

public static <T> List<T> asList(T... a) {
    return new ArrayList<T>(a);
}

したがって、ここで実際に起こっていることは、Arrays.asList(new int[] {})実際にを返すことです。これはList<int[]>、を返すこととは異なります。明らかに、ArrayListコンストラクターはを受け入れないため、コンパイラーは文句を言います。Arrays.asList(new Integer[] {})List<Integer>List<int[]>

于 2012-06-01T23:21:46.957 に答える
1

primesプリミティブint型の配列です。そのタイプはから派生しないObjectため、自動的にaに配置できますList(すべてCollectionsの場合と同様に、sのみを保持できますObject)。@ジャスティンは正しいです。配列からリストにアイテムを手動で追加する必要があります。

于 2012-06-01T23:34:57.253 に答える
0

containsメソッドにアクセスするためにこれを行う場合は、独自のメソッドを作成することもできます。

public boolean contains(int[] array, int item) {
  for (int element: array)
    if (element == item)
      return true;

  return false;
}
于 2012-06-02T00:15:25.900 に答える