知識整理(日付類の追加と正規表現&汎型&ローズマリー&コンパレータ&Pinin 4 Jによる中国語のソート)

32921 ワード

日付クラス&正規表現&プレーン&ローズマリー&コンパレータ&Pinin 4 Jに基づいて中国語の並べ替えを行います。
カタログ:LocalDateTime&DateTimeFormater&Pattern&Match&泛型&Collectionインターフェース&List&シーケンサ&Commparator&Pinin 4 Jに基づいて中国語の並べ替え&Mapを実現します。
Locall Date
//                
LocalDate date = LocalDate.now();
//     (     )
Date.getMonthValue();
//           LocalDate  
LocalDate date2 = LocalDate.of(2020,7,8);
Local Time
//                
LocalTime time = LocalTime.now();
//   (  )
time.getHour();
//           LocalTime  
LocalTime time = LocalDate.of(12,11,18);
Local DateTime
//                
LocalDateTime time = LocalDateTime.now();
//           LocalDateTime  
LocalDateTime time = LocalDateTime.of(2020,8,9,19,22,12);
// LocalDateTime   LocalDate LocalTime
LocalDate localDate = time.toLocalDate();
LocalTime localTime = time.toLocalTime();
DateTimeFormater
//           
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy MM dd  HH mm ss ");
//      
LocalDateTime datetime = LocalDateTime.now();

// datetime    2020 07 ……   
String time = fmt.format(datetime);
time = datetime.format(fmt);

// 2020 07 …… String    DateTime
String t = "2020 07 08  09 33 21 "; 
dateTime = LocalDateTime.parse(t, fmt);
注意事項:
DateFormatとSimpleDateFormatの違いは、DateTimeFormaterはスレッドの安全な実現であり、マルチスレッドの同時進行時に複数のスレッドに同じ現在のインスタンスを使用させて、データの整合性を保証できることである。しかし、DateFormatはスレッドが非セキュアに実現されているため、マルチスレッドを併発する際には、スレッドごとに個別にこのインスタンスを作成する必要がある。
Pattern&Match
  • Pattern:正規表現に対するコンパイル機能を提供する
  • Match:コンパイルされた正規表現にマッチする文字列を提供する機能
  • //Pattern & Matcher   :
    String s = "234798273489176123123123";
    Pattern p = Pattern.compile("1\\d{10}");
    Matcher m = p.matcher(s);
    //       m.find()     true
    while(m.find()){
        System.out.println(m.group());
    }
    
    汎型(Generaic)
    クラス宣言では、後に<>記号でタイプパラメータを指定し、クラスではこれらのタイプのパラメータを使用して動的タイプを設定できます。
    public class MyCalc<I,D,F> {
        public I add(I i1,I i2) {
    		return null;
    	}
        ...
    }
    
    public interface BaseManager<T> {
    
    	boolean add(T obj);
    	
    	boolean delete(T obj);
    	
    	boolean update(T obj);
    	
    	T findById(int id);
    	
    	ArrayList<T> findAll();
    }
    //    
    public class EmpManager implements BaseManager<Emp>{
        ...
    }
    
    Collectionインターフェース
    は、Javaセットのフレームワークのトップインターフェースであり、いくつかの同じタイプのデータセットを表すために使用され、内部は、セット内の要素を格納するための一連の方法を提供する。
    Collectionインターフェースの一般的な方法。
  • add(E e)添加要素
  • addAll(Collection extends E>c)は、現在のセットに1つのセットを追加する
  • clear()は、集合からすべての要素を削除する
  • contains(Object obj)は、セットに指定された要素
  • が含まれているかどうかを判定する。
  • isEmpty()は、セットが空かどうか判断します。
  • Remove(Object o)指定された要素を削除する
  • removeAll(Collection>c)指定されたセット
  • を削除する。
  • size()は、セット内の要素の個数
  • を取得する。
  • toAray()は、セット内のすべての要素を行列
  • に変換する。
  • iterator()は、集合中の要素のローズマリー
  • を返す。
    List
    ListはCollectionから継承されたインターフェースでもあります。ListはCollectionから拡張し、Collectionに基づいていくつかの方法を追加した。
  • get(int index)は、インデックスに従って要素
  • を取得する。
  • set(int index,E e)は、指定された位置に要素
  • を挿入する。
  • Remove(int index)指定されたインデックスの要素
  • を削除します。
  • listIterator()は、リスト・ディケンサを取得する

  • Listはインターフェースであるため、直接的に実現することができないので、JDKではListインターフェースの実現クラスのいくつかを提供している:
  • ArayList:スレッド不安全(同期)
  • LinkdList:チェーンベースのListは
  • を実現する。
    ディレクタ(Iterator)
    ローズマリーとは、ランドマークであり、スタック構造のようなデータ構造にセットを処理し、スタックトップポインタを介して、スタックの底に達するまで、要素を逐次下に検索します。
    //            (  )
    List<String> list = new ArrayList<>();
    Iterator<String> it = list.iterator();
    while(it.hasNext()) {			
        String s = it.next();
        if(s.equals("30")) {
            it.remove();
        }
        System.out.println(s);
    }
    
    Comprator
    コンパレータ(MyComprator)を定義します。
    //    MyComparator 
    public class MyComparator implements Comparator<String>{
    	@Override
    	public int compare(String s1, String s2) {
    		return s1.compareTo(s2);
    	}
    }
    //       
    list.sort(new MyComparator());
    
    //         
    list.sort(new Comparator<Student>() {
        @Override
        public int compare(Student s1, Student s2) {
            return s1.getAge() - s2.getAge();
    });
    
    TreeSetに追加された要素がComprableインターフェースを実現していなくても良いです。TreeSetを作成する時には、以下のコンストラクタを通して並べ替えコンパレータのオブジェクトに入るだけでいいです。
    //User    Comparable  
    //  TreeSet        
    Set<User> set = new TreeSet<>(
    (u1,u2)->u1.getId()-u2.getId());
    
    Pinin 4 Jに基づいて中国語の並べ替えを実現します。
    中国語のコンテンツの並べ替えには、オープンソースプラグイン(jarパッケージ)-Pinin 4 jが必要です。
  • pinin 4 j-2.50.jar
  • 中国語のソート例:
    List<String> names = new ArrayList<>();
    names.add("   ");
    names.add("   ");
    names.add("   ");
    names.add("  ");
    names.add("  ");
    names.add("    ");
    
    Collections.sort(names,(s1,s2)->{
    
        String p1 = "";
        String p2 = "";
        for(int i = 0;i<s1.length();i++) {
            p1 += PinyinHelper.toHanyuPinyinStringArray(s1.charAt(i))[0];
        }
        for(int i = 0;i<s2.length();i++) {
            p2 += PinyinHelper.toHanyuPinyinStringArray(s2.charAt(i))[0];
        }
        return p1.compareTo(p2);
    });
    
    System.out.println(names);
    
    セット
    Setセットもまた、Collectionから拡張されたサブセットであり、Listセットに比べて、Setセット内部に格納されているデータは添加順に格納されておらず、内部に重複した要素が出現することが許されていない(e 1.equals(e 2)))。nullに対しても一つしか出現していない。setセットに対してよく使用される実施は主に以下の通りである。
  • hashSet
  • TreeSet(二叉樹-マホガニー)
  • Linked HashSet
  • ハイセット
    //  
    Set<String> set = new HashSet<String>();
    //  set      
    Iterator<String> it = set.iterator();
    while(it.hasNext()) {
        String s = it.next();
        System.out.println(s);
        if(s.equals("lily")) {
    
    TreeSet
    複数のユーザのIDが一致した場合、TreeSetはcompreTo方式によって要素が重複していると判定し、重複を除去する。
    注意事項:
  • は、Setセット記憶要素の「無秩序」(追加順序で記憶されていない)ため、要素にインデックスの概念がないため、要素を取得するときは、ローズマリーを介して反復するしかない。
  • hashSetとTreeSetの違い
  • hashSetは、ハッシュ・テーブルの実装に基づいており、要素の格納順序も、ハッシュ・アドレスに従って並べ替えられているので、ハッシュ値によって
  • が重複しているかどうかが判断される。
  • TreeSetは、二叉樹−赤黒樹に基づいて実現され、要素の記憶順序は、要素によって実現されるComprableインターフェースにおけるcomprato方法によって実行され、反復するかどうかは、順序値によって判定される
  • である。
  • TreeSet使用要求:
  • セットの要素は、同じデータタイプでなければならない。
  • は、内部要素がComprableインターフェースを実現するか、TreeSetを作成するときに並べ替えコンパレータ
  • を提供する。
    Map(マップ)
    //  value 
    map.get("id")//foreach  
    Set<Long> keys = map.keySet();
    for (Long l : keys) {
    System.out.println(map.get("id").toString());
    }
    
    TreeMap
    //      
    Map<Stuent, String> map = new TreeMap<>();
    map.put(new Student(), "vaen");
    //        
    Map<Stu, Object> map2 = new TreeMap<Stuent, String>(new Comparator<Stu>{
    	public int compara(Stu s1,Stu s2){
    	return s1.getAge() - s2.getAge();
    	}
    });
    
    
    HashMap、hashtable、TreeMapの違い
  • HashMapはhashアルゴリズムの実装に基づいています。内部は配列を通してチェーンテーブルと結合して実現されません。空キーの存在を許可します。スレッド非同期の実現
  • です。
  • TreeMapは、赤と黒のツリーの実装に基づいており、内部要素の記憶順序は、キーを自然の順序で並べ替えた後に格納され、スレッド非同期の実現
  • である。
  • Hashtableは旧式のDictionaryクラスから継承されたもので、内部の実現原理はhashMapと同じで、空キーが存在することは許されず、スレッド同期が実現され、動作効率が低い