Javaコレクションオブジェクトと配列オブジェクトの変換

2913 ワード

開発では,集合オブジェクト(List,Set)を配列オブジェクトに変換したり,配列オブジェクトを集合オブジェクトに変換したりすることがしばしば必要である.Javaは相互変換のツールを提供していますが、乱用してはいけないので注意が必要です.
1、配列オブジェクトを集合オブジェクトに変換する
    最も暴力的な方法はnewの1つの集合オブジェクトで、それから配列を遍歴して、順次配列の中の要素を新しい集合の中に入れて、しかしこのようにするのは明らかに面倒です.JavaにはツールクラスArraysクラスがあり、asList()が配列をリストセットに直接変換できる方法を提供します.ただし、Arrays.asList(T...a)は、Java.util.ArrayListオブジェクトではなくjava.util.ArrayListオブジェクトであり、java.util.ArrayListオブジェクトであり、Arrayクラスの内部クラスであるため、返されるlistに対してaddやremoveなどの操作を行うことはできないことに注意してください.ソースコードを表示すると、クラスにaddなどの操作を行うと、例外が投げ出されることがわかります.このクラスの定義は橋渡しの役割を果たし、変換されたListセットを修正する必要がある場合は、Listlist=new ArrayList(Arrays.asList(array))を使用することができます.のように、このようにして生成されたlistは修正できると思います.コードは次のように実装されます.
String[] arrStr = {"a","b","c"};

List<String> list1 = Arrays.asList(arrStr);

List<String> list2 = new ArrayList<String>(Arrays.asList(arrStr));


     結論:配列を修正可能な集合リストに変換する必要がある場合は、Listlist=new ArrayList(Arrays.asList(array))を使用する.変換されたセットを変更しないでList list=Arrays.asList(array)を直接使用します.
 
2、集合オブジェクトを配列オブジェクトに変換する
    これは、リストインタフェースを直接使用するtoArrayメソッドを簡単に使用できます.なお、Listには2つのリロードされたtoArrayメソッドがあり、1つ目のList.toArray()はObject[]を返し、2つ目のList.toArray(T[]a)はT[]を返します.では、いったいどれを使うのか、2つのメソッドの違いは何でしょうか.1つ目は、Object[]タイプを返します.変換したい配列のタイプがObjectでない場合は、下に変換する必要がありますが、下に変換するとタイプが互換性がないため、例外が放出されますが、Object[]配列を巡って、配列内の各要素をタイプ変換することができます.これにより、タイプ変換例外は発生しません.通常,パラメータ付きの方法を用いると,汎型により特定のタイプの配列を返すことができ,これ以上順次変換する必要はない.たとえば、ListをString[]に変換すると、次のコードで実現できます.
List<String> listStr = new ArrayList<String>();

listStr.add("one");

listStr.add("two");

String[] arrStr1 = listStr.toArray(new String[] {});

String[] arrStr2 = listStr.toArray(arrStr1);

String[] arrStr3 = (String[]) listStr.toArray();//      。     Object[]   String[]


     結論:集合を配列に変換し、toArray(T[]t)メソッドを使用して指定したタイプの配列を返すことが望ましい.

3、ある要素が集合または配列に属しているかどうかを判断する
    コレクションオブジェクトに対して、直接使用する方法が提供されます.contailns法で判断できます.もちろん、自分で最も暴力的な方法を使って、集合の中のすべての要素を遍歴することもできます.
    配列オブジェクトに対しては,直接使用する方法はなく,最も暴力的な方法を用いて配列を巡ることができるが,明らかに優雅ではない.したがって、上述したように配列オブジェクトを集合オブジェクトに変換し、集合のcontainsメソッドを使用することができます.特定の要素が配列オブジェクトに存在するかどうかを判断し、元のデータを変更しない場合は、Arrays.asList()メソッドを直接使用して、固定サイズのListを生成し、containsメソッドを直接使用することができます.具体的なコードは次のとおりです.
List<String> listStr = new ArrayList<String>();

listStr.add("a");

listStr.add("b");

listStr.add("c");

boolean result1 = listStr.contains("d");//false

String[] arrStr= {"a","b","c"};

boolean result2 = Arrays.asList(arrStr).contains("a");//true