CodeGym /Java Blog /ランダム /Javaのコレクションクラス
John Squirrels
レベル 41
San Francisco

Javaのコレクションクラス

ランダム グループに公開済み
やあ!過去数回のレッスンで、私たちは の習得において大きな進歩を遂げてきましたArrayList。ただし、これまでは、削除、挿入、表示という最も単純な操作のみを実行しました。もちろん、これは、開発者が を使用するときに実行する必要があるタスクの完全なリストをカバーしているわけではありませんArrayList。配列とクラスについてのレッスンを覚えていますArraysか? Java の作成者は、プログラマが配列を扱うときに直面する最も一般的なタスクを処理できるように、このクラスを特別に設計しました。そして何についてArrayList? 確かに、それを使用して実行する必要がある一般的なタスクのリストがいくつかあります。それらはすべて特定のクラスに実装されているのでしょうか、それとも毎回独自の実装を作成する必要があるのでしょうか? もちろん、すべてを自分で書く必要はありません。コレクションに関連する最も一般的な操作は、特別な静的Collectionsクラスにすでに実装されています。 コレクションクラス - 1 Java では、データ構造のグループは一般にコレクションと呼ばれます。データはさまざまな方法で保存できます。これまでは、ArrayListデータが配列に格納されるクラスについてのみ学習してきました。他のコレクションについては後ほど説明します。Collections現時点では、このクラスは次のものだけでなく機能するように設計されていることを理解するだけで十分です。ArrayListだけでなく、他のタイプのコレクションでも同様です (したがって、その名前が付けられています)。では、このCollectionsクラスは実際にどのようなタスクに役立つのでしょうかArrayList? 最初の最も明白な方法は並べ替えです。配列に関するレッスンでは、数値を使った例を考えました。次に、文字列を使用した例を考えてみましょう。このクラスは、コレクションの内容を並べ替えるメソッド Collectionsを実装します。sort()

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       System.out.println(solarSystem);

   }
}
出力: [地球、木星、火星、水星、海王星、土星、天王星、金星] 文字列はアルファベット順にソートされます。しかし、なぜアルファベット順なのでしょうか?このStringクラスは実際に、文字列の比較方法 (たまたまアルファベット順) を制御するロジックを実装しています。自分で作成したクラスの場合は、独自の比較ロジックを実装できますが、これについては他のレッスンで説明します。このCollectionsクラスは、 内の最小要素と最大要素を見つけるのにも役立ちますArrayListmin()これは、およびメソッドを使用して行われますmax()

public static void main(java.lang.String[] args) {

   ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
   System.out.println(Collections.max(numbers));
   System.out.println(Collections.min(numbers));

}
出力: 7 1 当然のことながら、これは、すべての要素を反復処理して最大/最小の要素を見つけるコードを手動で記述するよりもはるかに便利です :) もう 1 つの非常に便利な方法は、 ですreverse()。要素が逆の順序になるようにリストを「反転」する必要がある場合、どうすればよいでしょうか? このようなアルゴリズムを自分で書くのは、おそらくそれほど簡単ではないでしょう :) 幸いなことに、このreverse()メソッドはすでにその方法を知っています。この方法で惑星がアルファベット順に並べ替えられたのが気に入らずsort()、その順序を Z から A に逆にしたいとします。

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       Collections.reverse(solarSystem);
       System.out.println(solarSystem);

   }
}
出力: [金星、天王星、土星、海王星、水星、火星、木星、地球] 並べ替えや要素の順序などについてたくさん話してきました。 しかし、逆の目的がある場合はどうなるでしょうか? たとえば、ビンゴ ゲームを実装しようとしているとします。ドラムに100の数字を追加します。それらは一度に 1 つずつ画面に表示されます。チケットのすべての数字を最初に消したプレイヤーが勝ちです。これは、次のメソッドを使用して簡単に実装できますshuffle()

public class Main {

   public static void main(java.lang.String[] args) {

       ArrayList<Integer> bingoDrum = new ArrayList<>(100);
       for (int i = 1; i <= 100; i++) {

           bingoDrum.add(i);// add the numbers 1 to 100 to the drum
       }

       Collections.shuffle(bingoDrum);// Mix it up
       System.out.println ("Your attention, please! Here are the first 10 numbers from the drum!");
       for (int i = 0; i < 10; i++) {

           System.out.println(bingoDrum.get(i));
       }

   }
}
出力: ご注意ください。ドラムの最初の 10 ナンバーは次のとおりです。32 61 4 81 25 8 66 35 42 71 とても簡単です。問題は解決され、ゲームの私たちの部分が書かれています :) 次に、別の状況を想像してみましょう。以前は、solarSystem惑星を含むリストを作成しました。そして、それはあらゆる点で私たちに適しているようですが、1 つだけ、そこからアイテムを削除したり、新しいアイテムを追加したりできるということです。これは明らかに私たちが期待する動作ではありません。太陽系は私たちのプログラムでは変更できないはずです。このCollectionsクラスには非常に興味深いメソッドがありますunmodifiableList()。引数として渡されたリストから不変のリストを作成します。このリストに項目を追加または削除することはできません。太陽系の惑星のリストを扱うとき、これはまさに私たちが望むものです。

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");// Try to add a new element
   }
}
出力: スレッド "main" の例外 java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075) at Main.main(Main.java:21) これはエラーです。に何かを追加しますsolarSystem! List<>ここで注意する必要があるのは、この型がすべての種類のリストに共通であるため、このメソッドが( ではなく)を返すという事実だけですArrayList<>。簡単に発生するもう 1 つの非常に一般的な状況は、プログラマが要素を間違った順序で追加することです。これが発生し、水星と海王星が混同されていることが判明した場合は、次の方法を使用してこの間違いを修正できますswap()

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// The planets are in the wrong order
       System.out.println(solarSystem);

       Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
       System.out.println(solarSystem);

   }
}
swap()リストと、交換する必要がある 2 つの要素のインデックスをメソッド に渡します。このメソッドは参照ではなくインデックスを使用することに注意してください。したがって、ここではこのArrayList.indexOf()メソッドを使用する必要がありました。出力: [海王星、金星、地球、火星、木星、土星、天王星、水星] [水星、金星、地球、火星、木星、土星、天王星、海王星] 最後に、非常に興味深い方法を紹介し ますdisjoint()2 つのコレクションが交差するかどうか、つまり、それらのコレクションに少なくとも 1 つの同一の要素があるかどうかをチェックします。そうでない場合は true を返します。実行すると false が返されます

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
       ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));

       System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));

   }
}
ご覧のとおり、2 つのリストにはまったく異なる要素が含まれているため、プログラムはtrueを出力します。これは面白くてとても役に立つクラスです。同様にArrays、多くの日常的で退屈な作業を代行してくれるので、他のことに集中できるようになります。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION