Java 10日目


9日目、10日目は、キャスト集合フレームワークがよく使われるクラスなので覚えておきましょう.

Set Interfaceベース


すべてのオブジェクトに1回繰り返しインポートするリピータ(Ivarator)を提供します.
  • 反復器とは、Identratorインタフェースが実装されたオブジェクトを指し、iterator()メソッドを呼び出すことで得ることができる.
  • リストセットは格納順序を保持し、Setセットは格納順序を保持しない.
  • オブジェクトを繰り返し保存することはできません.Nullは1つしか保存できません.(集合は無順序であるため重複は許されない)
  • 1.HashSetクラス

  • のソートは行われません.
  • 重複処理の排除

  • ハッシュ符号()を使用して、格納対象のハッシュ符号値
  • を比較する
  • equals()は、2つのオブジェクトを比較し、trueの場合、同じオブジェクトとみなす
  • .

    使用方法


    HashSet<タイプ>参照変数=new HashSet()
  • add():要素を追加
  • size():戻り要素数
  • remove():オブジェクト
  • を削除
    import java.util.HashSet;
    import java.util.Iterator;
    
    public class HashSet1 {
        public static void main(String[] args) {
            HashSet<String> hashSet1 = new HashSet<>();
            HashSet<String> hashSet2 = new HashSet<>();
    
            hashSet1.add("김사과");
            hashSet1.add("반하나");
            hashSet1.add("오렌지"); // 데이터의 순서를 정해주지 않는다.
            System.out.println(hashSet1);
            hashSet1.add("김사과"); // 같은 데이터가 못들어간다.
            System.out.println(hashSet1);
    
            for(String s : hashSet1){
                System.out.print(s + " ");
            }
    
            System.out.println("요소의 개수 : " + hashSet1.size());
    
            hashSet2.add("김사과");
            hashSet2.add("반하나");
            hashSet2.add("배애리");
            System.out.println(hashSet2);
    
            Iterator<String> iterator = hashSet2.iterator();
            while(iterator.hasNext()){ // hasNext() 메소드는 가져올 객체가 있으면 true를 리턴하고 더 이상 가져올 객체가 없으면 false를 리턴
                System.out.print(iterator.next() + " ");
            }
        }
    }
    
    リピーター
  • Setは、インデックス検索によってオブジェクトをインポートする方法がないため、オブジェクト全体に対して1回繰り返しインポートするリピータを提供する.
  • 歪みからオブジェクトをインポートする場合はnext()メソッドを使用します.next()メソッドを使用する前に、インポートするオブジェクトが接続されているかどうかを確認したほうがいいです.hasNext()メソッドはtrue(インポートするオブジェクトがある場合)を返し、false(インポートするオブジェクトがない場合)を返します.
  • 2.TreeSetクラス

  • 昇順に並ぶ
  • バイナリナビゲーションツリー構造、
  • バイナリナビゲーションツリー
  • の追加と削除には時間がかかりますが、よりパフォーマンスの高いデータ構造のソートと取得
  • 使用方法


    TreeSet treeSet = new TreeSet();
  • first():最小値
  • を返します.
  • last():最大値
  • を返します.
  • add():要素を追加
  • remove():パラメータとして渡された値
  • を削除します.
  • size():戻り要素数
  • pollFirst():最も低いオブジェクトを取り出し、セットから
  • を削除します.
  • poll Last():最も高いオブジェクトを取り出し、セットから
  • を削除します.
  • ()未満:パラメータ伝達値より小さいデータの最大値
  • を返す.
  • より高い():パラメータ伝達値より大きいデータの最小値
  • を返す.

    Mapインタフェース


    1.HashMapクラス


    Map map = new HashMap;
  • Mapインタフェースを有する典型的なクラス
  • キーと値からなる要素オブジェクト構造を記憶する資料構造
  • を有する.
  • 鍵は繰り返し記憶することができず、値は
  • を繰り返すことができる.
    値を既存の鍵と同じ鍵として保存すると、既存の値が失われ、が新しい値に置き換えられます.
  • ハッシュが使用されているため、大量のデータを取得する際に優れたパフォーマンスを発揮します.
  • 基本例
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    
    public class HashMap1 {
        public static void main(String[] args) {
            HashMap<String, String> hashMap = new HashMap<>();
            hashMap.put("apple", "김사과");
            hashMap.put("banana", "반하나");
            hashMap.put("orange", "오렌지");
            hashMap.put("melon", "이메론");
            hashMap.put("berry", "배애리");
            System.out.println(hashMap); // {banana=반하나, orange=오렌지, apple=김사과, berry=배애리, melon=이메론}
    
            System.out.println(hashMap.get("orange"));
    
            System.out.println(hashMap.keySet()); // 키 값만 출력
            System.out.println(hashMap.entrySet()); // 모든 데이터 출력
    
            for(String k : hashMap.keySet()){
                System.out.println("[key] : " + k + ", [value] : " + hashMap.get(k));
            }
            System.out.println();
    
            for(Map.Entry<String, String> entry : hashMap.entrySet()){
                System.out.println("[key] : " + entry.getKey() + ", [value] : " + entry.getValue());
            }
    
            hashMap.remove("melon"); // 제거
            System.out.println(hashMap);
    
            hashMap.replace("berry", "배리"); // 변경
    
            Iterator<String> keys = hashMap.keySet().iterator();
            while(keys.hasNext()){
                String key = keys.next();
                System.out.println("[key] : " + key + ", [value] : " + hashMap.get(key));
            }
        }
    }
    
  • put():保存要素(キー、値)
  • get():キーによって値
  • を返す
  • 鍵セット():鍵を返すすべてのセット
  • entrySet():鍵と値を返すすべてのセット
  • 置換():置換
  • TreeMapクラス


    TreeMap treeMap = new TreeMap();
  • バイナリツリーベースのMapクラス
  • キーと値を格納するMapとEntry,
  • キーの昇順で
  • を並べます.
    性能は
  • HashMap
  • より低い

    HashTableクラス


    Map map = new Hashtable;

  • JavaはHashMapをサポートするため、HashTableを実装または使用することは少ない.

  • テーブルにキーと値を格納するデータ
    HashMapとHashTableの違いは?
    同期メソッドからなるため、マルチスレッドはこれらのメソッドを同時に実行できません.他のスレッドを実行できるのは、1つのスレッドのみです.
  • 属性クラス

  • HashTableは
  • を継承する実施する.
  • HashTableはオブジェクトとして鍵と値を格納、属性はStringとして
  • を格納する.
  • アプリケーションのプリファレンスパラメータに関連する属性を格納するために使用されます.
  • 練習問題

    /*
        백준 2920번 음계
     */
    
    import java.util.Scanner;
    public class Sort {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int[] data = new int[8];
            boolean ascending = true;
            boolean descending = true;
    
            for(int i = 0; i < data.length; i++){
                data[i] = sc.nextInt();
            }
    
            for(int i = 1; i< data.length; i++){
                if(data[i] > data[i-1]) descending = false;
                if(data[i] < data[i-1]) ascending = false;
            }
            if(ascending) System.out.println("ascending");
            else if(descending) System.out.println("descending");
            else System.out.println("mixed");
    
        }
    }
    
    練習問題
    import java.util.ArrayList;
    import java.util.Scanner;
    import java.util.Stack;
    
    /*
        백준 1874번 스택 수열
     */
    public class Main3 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            Stack<Integer> s = new Stack();
            ArrayList<Character> result = new ArrayList<>();
    
            int num = sc.nextInt();
            int cnt = 1;
            for(int i=0; i < num; i++){
                int x = sc.nextInt();
                while(cnt <= x){
                    s.push(cnt);
                    cnt += 1;
                    result.add('+');
                }
                if(s.peek() == x){
                    s.pop();
                    result.add('-');
                } else {
                    System.out.println("NO");
                    return;
                }
            }
            for(int i =0; i<result.size(); i++){
                System.out.println(result.get(i));
            }
        }
    }
    

    学識


    概念を見て理解したときは理解したと思いますが、最後の2つの練習問題は自分で解こうとしても解けませんでした.このようにコードを見たときは思ったより簡単なコードでしたが、考えが難しすぎて無理だったようです