java - क्या नक्शा<स्ट्रिंग,?> प्राप्त करने और मामले को अनदेखा करने का कोई अच्छा तरीका है?




मकान का नक्शा फोटो (6)

TreeMap मानचित्र बढ़ाता है और कस्टम तुलनित्र का समर्थन करता है।

स्ट्रिंग एक डिफ़ॉल्ट केस असंवेदनशील तुलनित्र प्रदान करता है।

इसलिए:

final Map<String, ...> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

तुलनित्र खाते में लोकेल नहीं लेता है। इसके जावाडोक में इसके बारे में और पढ़ें।

इस प्रश्न का उत्तर यहां दिया गया है:

क्या Map<String, ?> प्राप्त करने और मामले को अनदेखा करने का कोई अच्छा तरीका है?


आप here मेरे अपाचे लाइसेंस प्राप्त CaseInsensitiveMap उपयोग कर सकते here । अपाचे कॉमन्स संस्करण के विपरीत, यह कुंजी के मामले को संरक्षित करता है। यह नक्शा अनुबंध को ट्रीमैप की तुलना में अधिक सख्ती से लागू करता है (साथ ही बेहतर समवर्ती अर्थशास्त्र भी है) (विवरण के लिए ब्लॉग टिप्पणियां देखें)।


आपको अपनी स्ट्रिंग कुंजी के लिए एक केस-असंवेदनशील बराबर () और हैशकोड () कार्यान्वयन के साथ एक रैपर वर्ग की आवश्यकता है। मानचित्र की कुंजी के लिए स्ट्रिंग के बजाय इसका उपयोग करें।

http://www.java.happycodings.com/Java_Util_Package/code3.html पर एक उदाहरण कार्यान्वयन देखें, मुझे इसे 2 मिनट के गुगल में मिला। मुझे समझ में आता है, हालांकि मैंने इसका कभी भी उपयोग नहीं किया है।


क्या आपके अपने मानचित्र को ओवरराइड करने / विधियों को ओवरराइड करना संभव होगा?

public class CaseInsensitiveMap extends HashMap<String, String> {
    ...
    put(String key, String value) {
       super.put(key.toLowerCase(), value);
    }

    get(String key) {
       super.get(key.toLowercase());
    }
}

यह दृष्टिकोण आपको अपने "कुंजी" प्रकार को बदलने के लिए मजबूर नहीं करता है बल्कि आपका मानचित्र कार्यान्वयन करता है।


नीचे दिए गए लिंक पर स्वीकृत उत्तर की जांच करें। मामले के बावजूद किसी मानचित्र में कुंजी की जांच कैसे करें?

निचली पंक्ति यह है कि "सबसे आसान समाधान है कि डालने / जांचने से पहले सभी इनपुट को अपरकेस (या लोअरकेस) में परिवर्तित करना है। आप अपना खुद का मानचित्र रैपर भी लिख सकते हैं जो स्थिरता सुनिश्चित करने के लिए ऐसा करेगा।"


Trove4j हैश Trove4j लिए कस्टम हैशिंग का उपयोग कर सकते हैं। हालांकि प्रदर्शन प्रदर्शन के प्रभाव हो सकते हैं कि हैशकोड को कैश नहीं किया जा सकता है (हालांकि ट्राव 4j को इसके आसपास एक रास्ता मिल सकता है?)। रैपर ऑब्जेक्ट्स (जैसा कि जॉन एम द्वारा वर्णित है) में इस कैशिंग की कमी नहीं है। TreeMap के बारे में मेरा अन्य जवाब भी देखें।







case-insensitive