Java集合フレームワーク初識二

4666 ワード

前節では,集合フレームワークの基本的な知識,Collectionインタフェース,Listインタフェース,Mapインタフェース,Setインタフェースなどの基本的な使い方について概説したが,今日はCollectionsツールクラスのソート方法Sort()およびComparableインタフェースとComparatorインタフェースの実装についてまとめる.
配列にはArraysツールクラスによって一連の配列の操作が提供され、集合にはCollectionsツールクラスによって提供される静的メソッドによって集合が操作されます.次にCollectionsクラスとは
一、Collectionsとは何か
Collectionsクラスはjavaです.utilの次のクラスは、ツールクラスに属し、一連の静的メソッドがセットを様々に操作し、そのメソッドがnullのオブジェクトを提供すると「空のポインタ異常」が放出されます.Collectionsクラスが提供するsort()メソッドは、集合中の要素をソートする機能を実現することができます.もちろん、オブジェクトが存在するクラスがComparableインタフェースを実現するタイプであることを前提としています.これは、学生をソートするようなもので、ある属性に従ってソートしなければなりません.年齢や身長、比較可能なものがソートできます.Collectionsが提供するsort()メソッドでは、Integer、Stringタイプをソートすることができます.Integer、StringなどはすべてComparableインタフェースを実現するタイプであるため、Comparableインタフェースはこのような規定であり、デフォルトでは自然な順序でソートされます.クラスがComparableインタフェースを実装している場合、このクラスはComparableが提供するcomparareTo(Object o)メソッドを実装する必要があります.2つのオブジェクトを比較する場合はcompareTo()メソッドを呼び出し、0より大きいと前者が後者より大きく、ゼロより小さいと前者が後者より小さいことを示します.ここではComparableの兄弟インタフェースComparatorインタフェースを忘れてはいけません.ComparatorインタフェースがComparableと異なるのはComparatorが一時的に比較を指定できるルールです.自然な順序のないオブジェクトcollectionをソートするには、Comparatorインタフェースを実装するにはcomparareメソッドを実装し、comparare()メソッドには2つのオブジェクトがあり、comparare(Object obj 1,Object,obj 2)内部実装はobj 1である.compareTo(obj 2)はintの値を返し,compareToの値を返す意味と同じである.
二、Collections.sort()の実装
package CollectionDemo;

import java.util.*;

public class CollectionTest {

    //  collection  sort   Integer
    public void test1(){
        int k;
        List integersList = new ArrayList();
        Random  r = new Random();
        for(int i=0;i<10;i++){
            do {
                k = r.nextInt(100);
            }while(integersList.contains(k));
            integersList.add(k);
            System.out.println("      :"+k);
        }
        System.out.println("----------   ------------");
        for (Integer li:
             integersList) {
            System.out.println("  :"+li);
        }
        Collections.sort(integersList);
        System.out.println("----------   ----------");
        for (Integer li:
                integersList) {
            System.out.println("  :"+li);
        }
    }
    //  collection  String    
    public void test2(){
        List stringList = new ArrayList<>();
        stringList.add("microsoft");
        stringList.add("google");
        stringList.add("alibaba");
        System.out.println("-----------   ----------");
        for (String s:
             stringList) {
            System.out.println(s);
        }
        Collections.sort(stringList);
        System.out.println("------   ----------");
        for (String d:
                stringList) {
            System.out.println(d);
        }
    }
  
    public static void main(String[] args){
        CollectionTest  ct = new CollectionTest();
               ct.test1();
               ct.test2();
      
     }
}

上のコードは、Comparableのインタフェースを実装したクラス(Integer、Stringなど)オブジェクトのソートです.
学生クラスをソートする場合は、上記の例を直接使用することはできません.学生の属性が多く、デフォルトのソートルールがないため、年齢、名前などの属性でソートするなど、彼のソートルールを指定するしかありません.
package CollectionDemo;

import java.util.HashSet;
import java.util.Set;

/**
 *    
 */
public class Student implements Comparable{
    private int id;
    private String name;
    public Set courses;


    public Student(int id,String name){
        this.id = id;
        this.name = name;
        this.courses  = new HashSet();
    }

    public void setId(int id){
        this.id = id;
    }


    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        return name != null ? name.equals(student.name) : student.name == null;
    }

    @Override
    public int hashCode() {
        return name != null ? name.hashCode() : 0;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    @Override
    public int compareTo(Student o) {

        return this.getId()-o.getId();
    }
}
  

package CollectionDemo;

import java.util.Comparator;

public class StudentCompator implements Comparator {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.getName().compareTo(o2.getName());
    }
}

このコードは、学生のidまたは名前に従ってソートすることを指定します.
以上はCollectionsを大まかにまとめただけです.sort()の方法とComparableインタフェースとComparatorインタフェースの実現.