JavaAdvanced-コレクションクラス
コレクションクラスとコレクションインターフェースは完全に異なるものであり、誰もが明確でなければなりません。
Collectionsクラスは、ツールクラスである前述のArraysクラスと同じです。1つは収集操作用で、もう1つは配列用です。
1.コレクションクラスで一般的に使用されるメソッド:
1.swap(リストリスト、int i、int j):指定されたリスト内の2つのインデックスの位置を交換します
2.sort(リストリスト):リスト内の要素の自然な順序に従って並べ替えます
3.shuffle(リストリスト):ランダム置換
4.reverse(リストリスト):reverse
5.fill(List list、Object obj):指定されたオブジェクトを使用して、指定されたリストのすべての要素を埋めます
6.copy(List dest、List src):ソースリストのデータをターゲットリストに上書きします
7.binarySearch(リストリスト、オブジェクトキー)バイナリ検索を使用して、指定されたリスト内の指定された要素のインデックス位置を見つけます
8.max()\ min():最大値\最小値を見つけます
ここでは、コレクションの種類のソースコードを確認します
[注:Collectionsクラスの並べ替えは、実際にはArraysクラスの並べ替えです]
Collections.sortをクリックして表示し
、クリックします。注意:最初にに変換します。オブジェクト配列を作成し、Arrays .sortを使用して並べ替えると、突然何かが見つかりましたか
--------------------------------- ------ -------------------------------------------- ------ -------------------------------------------- ------ ------------------------
2、2つの比較方法
カスタム比較を行う場合は、次の2つの方法を使用します。
1.使用するコンパレータ比較(非推奨)
書き換え比較する方法
実装:
ArrayList<Integer> list = new ArrayList();
list.add(49);
list.add(29);
list.add(88);
list.add(-49);
list.add(56);
System.out.println(list);
Collections.sort(list); //默认升序
System.out.println(list);
Collections.sort(list, new Comparator<Integer>() { //这里就是匿名内部类,重写了compare方法
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1; //降序:o2-o1,升序:o1-o2
}
});
System.out.println(list);
なぜお勧めできないのですか?その理由は、比較するたびにcompareメソッドを書き直す必要があり、面倒だからです。
2.使用する同程度の比較(推奨)
書き換えcompareTo方法
要件:学生の成績に応じて比較および並べ替えます。
具体的な実装:
学生クラス:
public class Student implements Comparable<Student>{
private String name;
private String gender;
private int score;
public Student(String name, String gender) {
this.name = name;
this.gender = gender;
}
public Student(String name, String gender, int score) {
this.name = name;
this.gender = gender;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public double getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "姓名:" + name + "\t" +
"性别:" + gender + "\t"+
"成绩:" + score ;
}
@Override
public int compareTo(Student o) { //重写compareTo方法
return this.score-o.score; //成绩升序
}
}
テストカテゴリ:
Student s1 = new Student("Jack","男",98);
Student s2 = new Student("Alis","女",87);
Student s3 = new Student("Louis","女",59);
Student s4 = new Student("Tom","男",88);
List<Student> list = new LinkedList();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
Collections.sort(list);
System.out.println(list);
結果は
、一度書いてすべてのクラスを共有する方が便利であることを示しています。