目次
1.2 Collections クラスとコレクションの違いと関係:
2. Collections クラスの main メソッド:
1. コレクションの概要:
1.1 コレクション クラスとは:
- Java.util.Collectionsは、LIst、Set、Mapなどのコレクションを操作するための収集ツールクラスです。
- Collections クラスは、コレクション要素の並べ替え、いくつかの要素の追加、ランダムな並べ替え、置換などの操作を実装できる一連の静的メソッドを提供します。
注: Collections クラスを新規にすることはできません。これは、コンストラクターがないためではなく、Collections のコンストラクターがプライベート化されているためです。ただし、Collections クラスのメソッドはすべて静的に変更され、クラス名を使用して直接呼び出すことができるため、呼び出し側メソッドはクラス名を使用して Collections クラスのメソッドを直接呼び出すことができます。
1.2 Collections クラスとコレクションの違いと関係:
違い:
- コレクションはプロパティと静的メソッドを持つツール クラスです。
- Collection はルート インターフェイスであり、その下に List インターフェイスと Set インターフェイスがあり、2 つのインターフェイスのそれぞれに固有の実装クラスがあります。
- 文字が 1 文字違うだけですが、この 2 つはまったく異なる概念です。
接続:
- Collections には、コレクション内の要素の処理を容易にするために、コレクション インターフェイスの下に Set コレクションと List コレクション用のメソッドが多数用意されています。
2. Collections クラスの main メソッド:
コレクション内のメソッドはすべて静的メソッドであり、クラス名、メソッド名によって直接呼び出すことができます。
1. public static void shuffle(リスト)。カオスソート
2. public static <T> boolean addAll(Collection<T> c, T... 要素)。いくつかの要素を追加する
3. public static <T> void sort(List<T> リスト、Comparator<? super T>)。並べ替え、指定されたルールに従ってコレクション内の要素を並べ替えます。
4. public static <T extends Comparable<? super T>> void sort(List<T> list)。並べ替え: デフォルトのルールに従ってコレクション内の要素を並べ替えます。
5. public static int binarySearch(リストリスト、オブジェクトキー)。検索。二分検索メソッドを使用して指定された List コレクションを検索し、List コレクション内の指定されたオブジェクトのインデックスを取得します。このメソッドを適切に機能させたい場合は、リスト内の要素がすでに順序付けられた状態であることを確認する必要があります。
6. public static void copy(List <? super T> dest, List<? extends T> src) copy。指定されたコレクション内のすべての要素を別のコレクションにコピーするために使用されます。
7. public static void replaceAll()。置換、コレクション内のすべての古い要素を新しい要素に置き換えます
1.shuffle() ランダムソート:
shuffle メソッドは、コレクション内の要素を元の順序からランダムにシャッフルするために使用されます。
注: シャッフル内のコレクションはリスト コレクションのみにすることができます。Set コレクションはエラーを報告します。
使用例:
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
public class CollectionsTest {
public static void main(String[] args) {
//创建一个Linkedlist集合
LinkedList linkedList = new LinkedList();
inkedList.add(123);
linkedList.add(456);
linkedList.add(234);
linkedList.add(567);
for (int i = 0; i <linkedList.size() ; i++) {
System.out.println(linkedList.get(i));
}
//打乱顺序
Collections.shuffle(linkedList);
System.out.println("===========");
System.out.println("打乱顺序之后:");
for (int i = 0; i <linkedList.size() ; i++) {
System.out.println(linkedList.get(i));
}
}
}
操作結果:
2. addAll() はいくつかの要素を追加します。
効果:
addAll メソッドは、いくつかの要素をコレクションにすばやく追加するために使用されます。
使用法:
最初の仮パラメータはコレクション オブジェクトを配置し、次にパラメータ 1、パラメータ 2、変数パラメータの型... を配置します。
可変パラメータ型とは何ですか?
メソッド内のパラメーターが実際に呼び出されるとき、実際のパラメーターの数は 0、1、またはそれ以上になる可能性があります。このパラメータは可変パラメータです。可変パラメータパラメータの意味: メソッドを呼び出すのに便利で、同じ型のデータをいくつでも渡すことができます。
注意点:
メソッドに複数のパラメータがある場合、変数パラメータは最後に配置する必要があります。
メソッドには変数パラメータを 1 つだけ含めることができます
使用例:
1. 複数の生徒オブジェクトを作成します。
2. addAll メソッドを使用して学生を Linkedlist コレクションにロードします
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
public class CollectionsTest {
public static void main(String[] args) {
//创建一个linkedlist集合
LinkedList linkedList = new LinkedList();
Student student1 = new Student(1, "章1");
Student student2 = new Student(6, "章2");
Student student3 = new Student(9, "章3");
Student student4 = new Student(1, "章4");
Collections.addAll(linkedList,student1,student2,student3,student4);
for (int i = 0; i <linkedList.size() ; i++) {
System.out.println(linkedList.get(i));
}
操作結果:
3. sort() の自然な並べ替え:
効果:
ルールに従ってセット内の要素を昇順または降順に並べ替えるか、何もしません。
注意点:
sort メソッドを使用する場合、コレクション要素は Comparable のサブタイプである必要があります。つまり、コレクション内の要素は比較可能なインターフェイスで comparaTo メソッドを実装する必要があります。それ以外の場合、この方法は使用できません。
public int compareTo(T o);
sort メソッドを使用するには、この抽象メソッドを実装する必要があります。ただし、String などの一般的に使用される基本クラス、基本データ型のラッパー クラスなどはすでにこのメソッドを実装しているため、このメソッドを自分で書き直す必要はありません。カスタム型のsortメソッドを使用するには、comparaToメソッドを実装する必要があります。
4.sort() カスタム並べ替え:
学生クラスなどのカスタム タイプには、年齢、名前などの属性があります。複数の学生クラス オブジェクトを作成し、List コレクションに追加します。sort メソッドをカスタマイズする場合は、comparaTo メソッドを書き直す必要があります。
@Override public int compareTo(Student2 o) { return this.age-o.age; }
書き換え後のcomparaToメソッド。
オーバーロード後のsort():
sort() メソッドには 2 番目のタイプ (コレクション、新しい Comparator<Object>) もあります。
Comparator はインターフェイスであり、実際には Comparator の新しい実装クラスですが、内部の抽象メソッドを実装する必要があります。
使用例:
1. 年齢、名前、学年の属性を使用して生徒クラスをカスタマイズします。
2. 5 つの生徒オブジェクトを作成し、年齢に応じて年齢の昇順と学年の降順で出力します。
import java.util.Collections;
import java.util.LinkedList;
public class CollectionsTest2 {
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
Student2 student1 = new Student2(10, "章1");
Student2 student2 = new Student2(16, "章2");
Student2 student3 = new Student2(19, "章3");
Student2 student4 = new Student2(18, "章4");
//把对象添加到集合中
Collections.addAll(linkedList,student1,student2,student3,student4);
Collections.sort(linkedList);
for (int i = 0; i <linkedList.size() ; i++) {
System.out.println(linkedList.get(i));
}
}
}
class Student2 implements Comparable<Student2>{
int age;
String name;
public Student2(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Student2{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
@Override
public int compareTo(Student2 o) {
return this.age-o.age;
}
}
注意点:
1. comparaToメソッドを書き換える際に、どのような属性で比較するかを一定のルールでソートする、この比較の属性が比較ルールソートです。
2. 昇順または降順のルールを実装します。this (現在の呼び出しメソッドのオブジェクト) o (パラメーターが渡されます)
比較の下部にあるすべてのロジックはペアごとの比較ロジックであり、
比較結果の正の数を返します。 this.age > o.age
負の数 this.age < o.age
0 this.age==o.age。
6.copy() コピー:
機能: 指定されたコレクション内のすべての要素を別のコレクションにコピーします。
使用:
(リスト <? super T> dest,List<? extends T> src)
dest はターゲット コレクション、src は元のコレクションです。元のコレクションの要素をターゲット コレクションに入れます。
注意点:
1. 元のコレクションがターゲット コレクションにコピーされ、元のコレクションはターゲット コレクション内の要素を上書きします。このカバレッジは、インデックス値 0 から始まり、元のコレクションがコピーされるまで続きます。
2. ターゲット コレクションの長さは、ソース コレクションの長さと少なくとも同じです。ターゲット コレクションの長さが長くても、ターゲット コレクション内の残りの要素には影響しません。ターゲット コレクションがソース コレクション要素全体を含めるのに十分な長さでない場合、プログラムは IndexOutOfBoundsException 例外をスローします。
3. copy メソッドは List コレクションのみをコピーできます。set コレクションはコピーできません。
個人的な意見: 対象のコレクションの要素を上書きしてしまうため、あまり有用とは思えません
使用例:
1. セット 1 をセット 2 に割り当てます
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
public class CollectionsTest2 {
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
LinkedList linkedList1 = new LinkedList();
//创建两个set集合
HashSet hashSet = new HashSet();
HashSet hashSet1 = new HashSet();
linkedList1.add(123);
linkedList1.add(222);
linkedList.add(333);
linkedList.add(444);
linkedList.add(888);
hashSet.add(234);
hashSet1.add(666);
Collections.copy(linkedList, linkedList1);
//使用copy方法复制set会报错
// Collections.copy(hashSet,hashSet1);
for (int i = 0; i < linkedList.size(); i++) {
System.out.println(linkedList.get(i));
// }
}
}
}
操作結果:
7. replaceAll()。交換:
機能: コレクション内のすべての古い要素を新しい要素に置き換えます。
使用:
(リストリスト、オブジェクトoldVal、オブジェクトnewVal)
list は置き換える必要があります、oldval は置き換える必要があります、newval 新しい値
使用例:
セット内の 333 を文字列「8888」に置き換えます。
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
public class CollectionsTest2 {
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
linkedList.add(123);
linkedList.add(222);
linkedList.add(333);
linkedList.add(444);
linkedList.add(888);
hashSet.add(234);
hashSet1.add(666);
//替换
Collections.replaceAll(linkedList,333,"8888");
for (int i = 0; i < linkedList.size(); i++) {
System.out.println(linkedList.get(i));
// }
}
}
}