2012-01-13 13 views
6

मेरा एल्गोरिदम boolean की एक विशाल सरणी का उपयोग करता है, और जैसा कि मुझे सिखाया गया था, यह प्रत्येक बूलियन चर के लिए 1 बाइट लेता है। क्या बूलियन सरणी घोषित करने और स्मृति उपयोग को कम करने के लिए वैसे भी है, क्योंकि मैं फोन वातावरण पर काम कर रहा हूं।जावा में 1-बिट चर घोषित करना संभव है?

संपादित करें: मेरा दोस्त और मैं चर्चा कर रहा हूं कि बिटकसेट सामान्य बूलियन सरणी से धीमा है या नहीं। कृपया इसे स्पष्ट करें। एल्गोरिदम को अभी भी सर्वोत्तम मांग के रूप में प्रदर्शन की आवश्यकता है।

+12

[java.util.BitSet] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html)? या क्या मैं कुछ न कुछ भूल रहा हूं? – Mysticial

+2

गीज़ ... मुझे हिचकिचाहट करना बंद कर देना चाहिए और इन्हें उत्तर के रूप में पोस्ट करना चाहिए ... – Mysticial

+2

@ मिस्टिकियल: हिचकिचाहट में थोड़ा और संकोच करें। ;) – Mehrdad

उत्तर

18

BitSet

इस वर्ग बिट्स रूप में की जरूरत होती है कि का एक वेक्टर लागू करता है। बिट सेट के प्रत्येक घटक में बूलियन मान होता है। बिटसेट के बिट्स गैर-अंकीय पूर्णांक द्वारा अनुक्रमित हैं। व्यक्तिगत अनुक्रमित बिट्स जांच, सेट या साफ़ हो सकते हैं। एक बिटसेट का उपयोग लॉजिकल और, लॉजिकल समावेशी या और तार्किक अनन्य या संचालन के माध्यम से किसी अन्य बिटसेट की सामग्री को संशोधित करने के लिए किया जा सकता है।

boolean बनाम BitSet

+0

धन्यवाद। लेकिन कृपया उस प्रश्न का उत्तर दें जिसे मैंने अभी EDIT में जोड़ा था। –

1

आप एक EnumSet रूप में अच्छी तरह उपयोग कर सकते हैं का उपयोग कर के बीच Link to benchmark। यह आपको नामित बिट्स का उपयोग करने की अनुमति देता है और बिटसेट का उपयोग करने से मित्रवत हो सकता है जो अनुक्रमित बिट्स का उपयोग करता है।

एनम प्रकारों के उपयोग के लिए एक विशेष सेट कार्यान्वयन। एक एनम सेट में सभी तत्व एक सिंगल एनम प्रकार से आते हैं जो सेट बनाया गया है, स्पष्ट रूप से या स्पष्ट रूप से निर्दिष्ट किया गया है। एनम सेट को आंतरिक रूप से बिट वैक्टर के रूप में दर्शाया जाता है। यह प्रतिनिधित्व बेहद कॉम्पैक्ट और कुशल है। इस कक्षा का स्थान और समय प्रदर्शन पारंपरिक इंट-आधारित "बिट झंडे" के लिए उच्च गुणवत्ता वाले, टाइपएफ़ विकल्प के रूप में उपयोग करने की अनुमति देने के लिए पर्याप्त होना चाहिए। यहां तक ​​कि थोक संचालन (जैसे कि सभी और retainAll) बहुत जल्दी चलना चाहिए यदि उनका तर्क भी एक enum सेट है।

उदा।

BitSet bs = new BitSet(4); 
bs.set(1); // READY 
bs.set(3); // LARGE_FLAG 
boolean largeFlag = bs.get(1); // LARGE_FLAG 
System.out.println("Using BitSet: "+bs); 

EnumSet<Settings> settings = EnumSet.noneOf(Settings.class); 
settings.add(Settings.READY); 
settings.add(Settings.LARGE_FLAG); 
boolean largeFlag2 = settings.contains(Settings.LARGE_FLAG); 
System.out.println("Using EnumSet: "+settings); 

प्रिंट

Using BitSet: {1, 3} 
Using EnumSet: [READY, LARGE_FLAG] 

IMHO EnumSet ज्यादा अपने उचित अगर साफ है।

संबंधित मुद्दे