質問1
使用する
List<Integer> ints=new ArrayList<>();
それ以外の
List<Integer> ints=new ArrayList<Integer>();
それらは完全に同等であるため、柔軟性は追加されません。ひし形(<>
)は、rawタイプではなく、明らかなパラメーター化されたタイプが必要であることを示します。
オラクルはここでそれを説明しています:
Java SE 7では、コンストラクターのパラメーター化された型を、空の型パラメーターのセット(<>)に置き換えることができます。
コードの冗長性が少し減り、読みやすく、保守しやすくなります。これはおそらくOracleの例でより明白です:
Map<String, List<String>> myMap = new HashMap<>();
に比べ
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
質問2
Arrays.asList(1,2);
Listインターフェースを実装する具象クラスからオブジェクトを返します。
Java 1.6では、これは固定サイズのインスタンスですjava.util.Arrays.ArrayList
。
3354 public static <T> List<T> asList(T... a) {
3355 return new ArrayList<T>(a);
3356 }
ただし、重要な点は、オブジェクトは常に、そのインターフェイスが定義するメソッドを実装する具象クラスであるということです。
あなたがしているとき、あなたはインターフェースCollections.sort(
を使用していませんが、この非常に具体的なコードを含むCollectionsクラスを使用しています:Collection
132 public static <T extends Comparable<? super T>> void sort(List<T> list) {
133 Object[] a = list.toArray();
134 Arrays.sort(a);
135 ListIterator<T> i = list.listIterator();
136 for (int j=0; j<a.length; j++) {
137 i.next();
138 i.set((T)a[j]);
139 }
140 }