Java 列挙 - 値によって対応する列挙を検索します。

Python WeChat 注文アプレット コース ビデオ

https://edu.csdn.net/course/detail/36074

Pythonによる実践的な定量取引財務管理システム

https://edu.csdn.net/course/detail/35475

1. 背景

Java 列挙は、一般に、1 年の四季、12 か月、1 週間の 7 日間、南東、北西の方向などの一連の定数を表す特別なクラスです。

最近の仕事で他の多くのシステムとドッキングしましたが、ドッキングした同じシステムに異なる環境 (開発、テスト、正式環境) があり、各環境の構成情報は通常は変更されないため、列挙が使用されていることがわかりました。構成用です。項目の使用は比較的簡単です。異なる環境構成では、もう 1 つの列挙値を定義するだけで済みます。

列挙型の使用には、渡された値を通じて対応する列挙型を返すことが含まれます。

2. 値を通じて、クエリは対応する列挙を返します (サンプル コード)

2.1. 列挙型クラス
@Getter
public enum CustomType {
    TEST("test","测试","111"),
    DEV("dev","开发","222");

    String typeCode;
    String typeName;
    String orgId;

    CustomType(String typeCode, String typeName, String orgId) {
        this.typeCode = typeCode;
        this.typeName = typeName;
        this.orgId = orgId;
    }
}

2.2. 一般的に使用される列挙メソッド、values()、ordinal()、および valueOf() メソッド

enum によって定義された列挙クラスは、デフォルトで java.lang.Enum クラスを継承し、2 つのインターフェイス java.lang.Seriablizable および java.lang.Comparable を実装します。

value()、ordinal()、および valueOf() メソッドは、java.lang.Enum クラスにあります。

  • value() は列挙クラス内のすべての値を返します。
  • ordinal() メソッドは、配列インデックスと同様に、各列挙定数のインデックスを見つけることができます。
  • valueOf() メソッドは、指定された文字列値の列挙定数を返します。

値を渡して列挙をクエリするには、values() メソッドを通じてすべての列挙を返し、すべての列挙をスキャンします。渡されたパラメータ値が現在の列挙の値と同じである限り、現在の列挙が返されます。 ;

2.3. 1 つ以上の値を渡して、対応する列挙を返します。
    public CustomType find(String typeCode){
        for (CustomType value : CustomType.values()) {
            if(typeCode.equals(value.getTypeCode())){
                return value;
            }
        }
        //根据自身的业务 查不到可以返回null,或者抛出异常。
        return null;
    }

    public CustomType find(String orgId,String typeCode){
        if(orgId == null || typeCode == null){
            return null;
        }

        for (CustomType value : CustomType.values()) {
            if(orgId.equals(value.getOrgId()) &&
                    typeCode.equals(value.getTypeCode())){
                return value;
            }
        }
        //根据自身的业务 查不到可以返回null,或者抛出异常。
        return null;
    }

3. 検索の最適化

value() メソッドを使用して検索を実行するたびに、時間計算量は O(n) ですが、HashMap 検索の時間計算量は O(1) です。

通常、列挙の数はそれほど大きくありませんが、values() メソッドによる各走査検索も非常に高速です。HashMap を使用すると、もう少し多くのメモリが必要になりますが、これを考慮すると、メモリの時間計算量を O(n) から O(1) に減らすことができます。これはコスト効率が高く、コードの最適化に時間を費やすことができます。 。

    private static Map<String,CustomType> orgCustomType = new HashMap<>();
    static {
        for (CustomType value : CustomType.values()) {
            orgCustomType.put(value.getOrgId(),value);
        }
    }

    public CustomType find(String orgId){
        return orgCustomType.get(orgId);
    }

おすすめ

転載: blog.csdn.net/pythonxxoo/article/details/122757988