JAva配列回転listエラー

4165 ワード

AVaにおける配列回転リストはArrays.asList(T...a)メソッドを用いる.
例:
  public   class   App {    public   static   void   main(String[] args) {      List stringA = Arrays.asList( "hello" "world" , "A" );      String[] stringArray = { "hello" , "world" , "B" };      List stringB = Arrays.asList(stringArray);
       System.out.println(stringA);      System.out.println(stringB);    } }
 実行結果:
  [hello, world, A] [hello, world, B]
 この方法はとても便利で、分かりやすいです.しかし、以下の2点に注意する必要があります.
一、基本データ型をリストに変換できない
よく見ると、asListが受け入れるパラメータは汎用的な長さ変化パラメータであり、基本データ型は次のように汎用化できないことがわかります.
  public   class   App {    public   static   void   main(String[] args) {      int [] intarray = { 1 2 3 4 5 };      //List list = Arrays.asList(intarray);      List< int []> list = Arrays.asList(intarray);      System.out.println(list);    } }
  output: [[I @66d3c617 ]
これはintタイプの配列をパラメータとしているため,変換後のリストにはint[]要素が1つしか含まれていない.
ソリューション:
基本データ型の配列をパッケージ型のlistに変換するには、guavaクラスライブラリのツールメソッドを使用します.例は次のとおりです.int [] intArray = { 1 2 3 4 }; List list = Ints.asList(intArray);
 
 二、asListメソッドは配列の1つのビューを返す
ビューは、このlistに対する操作が元の配列に反映されることを意味し、このlistは一定長であり、add、removeなどの長さを変える方法はサポートされていない.
  public   class   App {    public   static   void   main(String[] args) {      int [] intArray = { 1 2 3 4 };      List list = Ints.asList(intArray);      list.set( 0 100 );      System.out.println(Arrays.toString(intArray));      list.add( 5 );      list.remove( 0 );
     } }
 output: [ 100 2 3 4 ] UnsupportedOperationException UnsupportedOperationException
理由:
get(i)? size()? 問題ありません.
add()? ,この操作はサポートされていません!!
どうしてですか.Arrays.asList(T...a)メソッドが何をしているのか見てみましょう.
う~ん、なんでもないみたいで、ArrayLIstの実例が返ってきましたね.コードをもっと見てください.
これは何ですか.元に戻ったArrayListはjava.util.ArrayListではなく、Arraysの内部クラスのインスタンスです.たちまちだまされたような気がした.
この内部類にどんな方法があるか見てみましょう.確かにadd方法はないようですね.
ではaddメソッドを使用するにはどうすればいいのでしょうか.
外層にjava.util.ArrayListをもう1層包装すればいいだけです.
最後に、Arrays.asListメソッド自体は何の問題もなく、変換されたlistに対してどのような操作をするかを見るだけで、listの要素をクエリーする必要があるだけであれば、直接使用すればよい.要素を追加、削除する必要がある場合は、java.util.ArrayListを包装して使用しましょう.