0708-JAVA関数インタフェース/集合フレームワーク


0708-JAVA標準APIの関数インタフェース

andThen() / compose()

  • andThen()とcompose()メソッド
  • 関数インタフェースを有するデフォルトの方法
  • 2つの関数インタフェースを順番に接続し、
  • を実行します.
  • 第1の戻り値は第2のパラメータとして、最終結果値
  • を返す.
  • andThen()とComponent()の違いは
  • は、どの関数インタフェースから
  • の処理を開始するかを区別する.
  • andThen()はA->B
  • を表す
  • の組み合わせ()はB->A
  • である.

    andThen()

    //데이터 소비자를 람다식으로 익명구현객체 생성.
    Consumer<Member> consumerA = (m) -> {		//void accept(T t); 
    	log.info("consumerA : " + m.getName() );
    }; 
    // 데이터 소비자를 람다식으로 익명구현객체 생성
    Consumer<Member> consumerB = (m) -> {		//void accept(T t);
    	log.info("consumerB : " + m.getId());
    };
    // 위의 2개의 데이터 소비 로직을 하나의 파이프라인(Pipeline)으로 구성 
    Consumer<Member> pipline = consumerA.andThen(consumerB);
    pipline.accept(new Member("홍길동", "hong"));

    フレームとライブラリの違い

  • リポジトリとフレームワークの違いは、制御フローの主導的な地位が誰/どこにあるかにある.
  • は、アプリケーションのストリームを把握している人によって異なります.
  • フレームワークは、ユーザーが必要なコードを記述できる独自のプロセス全体を有し、ライブラリは、ユーザーがプロセス全体を作成し、ライブラリにインポートおよび書き込みすることができる.
  • 集合フレームワーク-第15章ppt

  • 集合フレームワーク?->
  • コレクションライブラリで、オブジェクトの追加、削除、および取得を効率的に行う
  • java.utilパッケージに含まれる
  • 集合フレームワークの主なインタフェース

  • [Collection] -> [List]/[Set]
    上位抽象メソッド
  • [Map]
  • 集合フレームワークの主なインタフェース分類


    インタフェース分類機能はクラスリストシリーズを実施し、O/重複記憶OrarrayList、LinkedList、Vectorsetシリーズを保持し、X/重複記憶XHashSet、TreeSetMapシリーズキーと値対記憶/キーは重複記憶XHashMap、HashTable、TreeMap、Properties

    - List

  • リストインデックス管理
  • を繰り返してオブジェクトを格納できます.
  • ArrayList/Vector/LinkedList
  • ArrayList

  • に追加された各要素には、順序(順序)
  • があります.
  • の値の繰り返しを許可します.(繰り返し可能)
  • add()を使用して要素を追加
  • add(3,nice)-->インデックスの場所を直接指定できます
  • remove()を使用して要素を削除
  • remove(2)-->インデックスの場所を指定し、
  • を削除
  • remove("nice")-->指定したオブジェクトと同じ要素を検索して削除する
  • get(n)で要素値
  • を参照

    リスト内のすべての要素を巡回します。

  • ダイレクトfor文系リストのサイズを利用して、
  • を巡回します.
    for(int i=0; i<list.size(); i++) {	// 전체 리스트의 요소 순회 
    	String str = list.get(i); // 해당 인덱스 번호의 구슬(객체) 얻기 
    	log.info(str);
    }// classical for
  • 拡張for文(インデックス番号は必要ありません)
  • for(String s : list) {
    	log.info(s);
    }//enhanced for 
  • List.forEach()の最終処理方法のループ(インデックス番号は不要)ram式を用いて,ArrayListの完全出力は
  • であった.
    //void accept(T t);    T -> String    //타겟타입의 시그니처 메소드 확인 
    list.forEach( t -> log.info(t) );  // 람다식으로 구현 해서 요소 출력 
    list.forEach(log::info);		// 메소드참조를 이용하여 요소 순회 
    Arrays helperクラスのasListメソッドを使用する場合、新しい演算子を使用してオブジェクトを作成する必要がなく、要素の値を使用できます.
    List<String> list1 = Arrays.<String>asList("홍길동", "신용권", "김자바");
    List<Integer> list2 = Arrays.<Integer>asList(1, 2, 3);

    Vector

  • シーケンス保証
  • は、
  • の繰り返しを許可する.
  • ArrayListとVectorは、要素を中から入れ/取り出すと、プッシュ現象が発生します.(注)
  • Vectorの内部実装は99%ArrayListと同じ
  • 園区は
  • を追加で実施し、マルチスレッド環境で要素オブジェクトを安全に操作できる.
    したがって、実際の作業では、Thread-Safe Vectorオブジェクトがより多く使用される.
    //--1. Thread-safe한 ArrayList 객체 생성 
    List<Board> list = new Vector<Board>();

    LinkedList

  • LinkedList:要素を配列のように横に置くのではなく、ここ/そこに分散して格納するので、頻繁にオブジェクトを削除したり挿入したりする場所では、ArrayListよりも性能が良い.
  • 1)したがってLinkedListにはインデックスという概念自体がない
  • 2の代わりに、変更(追加/削除)が頻繁に発生する「押す/引く現象」自体はありません.
  • List<String> list2 = new LinkedList<>(); //타입추론
  • Hashコード
    最上位オブジェクトクラスから継承されるhashCodeメソッド.
    オブジェクトの物理アドレスを論理アドレスに変換する値を16進数で表す->OID
  • Set

  • 数学では集合にたとえることができる.
  • の格納順序(X)は保持されない.
  • オブジェクト(X)を繰り返し保存できません.
  • にはnullが1つしか格納されません.
  • HashSet, LinkedHashSet, TreeSet
  • Setオブジェクト
  • を作成
    //Set 객체 생성 
    Set<Member> set = new HashSet<>();
  • setは、オブジェクト全体を巡回し、この反復器を使用して巡回するいわゆる「反復器」オブジェクトを提供します.
  • //Iterator(반복자) 객체반환
    Iterator<Member> iterator = set.iterator();		
  • 反復器(iterator)のhasNext()メソッドを使用して、優先的に巡回する要素があるかどうかを確認します.(true)の場合、反復器のnext()メソッドを使用してオブジェクトを取得できます.
  • while(iterator.hasNext()) {
    	Member element = iterator.next();
    	log.info("\t" + element);
    }//while
    コレクションのプロパティのため、同じオブジェクト(ピアオブジェクト)を繰り返すことはできません.
    Set/HashSetに格納されたオブジェクトが等しいか否かを判定するアルゴリズムが適用される.
  • は、判断を繰り返すためのステップアルゴリズムである.
  • @Override
    public int hashCode() {
    	log.debug("hashCode() invoked.");
    	// 회원의 이름의 해쉬값과 나이를 더한 값으로 회원간의 구분값으로 하자! 
    	return name.hashCode() + age;
    }//hashCode
  • 繰り返し判定のための2ステップアルゴリズム
  • @Override
    public boolean equals(Object obj) {
    	log.debug("equals(obj) invoked.");	
    	//매개변수로 받은 객체가 같은 회원객체라면
    	if(obj instanceof Member) { // 회원객체라면 
    		Member member = (Member) obj; // 강제형변환(다형성-1) 			
    		//현재 회원과 매개변수로 넘어온 회원간의 비교 기준을,
    		//기존 회원의 이름과 나이, 비교 회원의 이름과 나이가 모두 같으면 같은 회원의 판단.
    		return member.name.equals(name) && (member.age == age);
    	} else {
    		return false;  //같은 회원객체가 
    	}//if-else
    }//equals
  • 等対象(繰返し判定)判定アルゴリズム
    アドレスがLombokの@EqualsAndHashCodeアドレス