2011-10-22 11 views
5

वहाँ कुछ अच्छा पाठ, किताबें, पीडीएफ या वेबसाइट बताते हैं कि कैसे एक सा वेक्टर लागू करने के लिए विशेष रूप से जावा में, है?थोड़ा वेक्टर (बिटसेट) (जावा में) को कैसे कार्यान्वित करें?

मैं इस सवाल पूछना क्योंकि मैं जावा में अपने ही BitSet कार्यान्वयन सुनिश्चित करने के लिए करना चाहते हैं। कारण यह है कि मैं aditional सुविधाओं को जोड़ने और tweak है कि अगर मैं java.util से BitSet जावा वर्ग को संशोधित नहीं किया जा सकता है करना चाहते हैं। इसके अलावा, मैं अपना खुद का कार्यान्वयन करना चाहता हूं ताकि मैं लाइसेंस के साथ निपटने के बिना इसे अपने ओपन-सोर्स प्रोजेक्ट में उपयोग कर सकूं।

धन्यवाद!

+0

अपाचे महाउट का ओपन सोर्स बिटसेट है। – bmargulies

+1

अन्य बिट्स का उपयोग क्यों न करें और केवल उन्हें प्राप्त करें? –

उत्तर

5

आप अपने बिट वेक्टर या बिट सेट के लिए फैंसी प्रदर्शन या अन्य फैंसी सुविधाओं चाहते हैं, तो के रूप में कुछ पहले से ही सुझाव दिया है, तो आप थोड़ा वेक्टर/सेट के किसी मौजूदा कार्यान्वयन के वारिस चाहिए। या, आप कुछ ओपन सोर्स कार्यान्वयन का उल्लेख कर सकते हैं। हालांकि, अगर आप बिट वेक्टर के तंत्र को सीखना चाहते हैं, तो यह आसान है।

class BitSet{ 
    private Byte[] p; 

    private BitSet(){ 
     p = null; 
    } 

    public BitSet(int n){ 
     assert n > 0; 
     p = new Byte[(n - 1) >> 3 + 1]; 
    } 

    public BitSet Complement(){ 
     BitSet bs = new BitSet(); 
     bs.p = new Byte[p.length]; 
     for(int i = 0; i < p.length; i++){ 
      bs.p[i] = ~ p[i]; 
     } 
     return bs; 
    } 

    public BitSet Union(BitSet bs2){ 
     assert p.length == bs2.p.length; 
     BitSet bs = new BitSet(); 
     bs.p = new Byte[p.length]; 
     for(int i = 0; i < p.length; i++){ 
      bs.p[i] = p[i] | bs2.p[i]; 
     } 
     return bs; 
    } 

    public BitSet Intersection(BitSet bs2){ 
     assert p.length == bs2.p.length; 
     BitSet bs = new BitSet(); 
     bs.p = new Byte[p.length]; 
     for(int i = 0; i < p.length; i++){ 
      bs.p[i] = p[i] & bs2.p[i]; 
     } 
     return bs; 
    } 
} 

आप को लागू करने और अपने स्वयं के सेट के लिहाज से आपरेशन ऊपर के उदाहरण में सुविधाओं को जोड़ सकते हैं: यहाँ उदाहरण के रूप में एक कार्यान्वयन है।

2

आपकी आवश्यकता के लिए एक त्वरित कार्यान्वयन। आशा करता हूँ की ये काम करेगा।

public class BitSet 
    { 
     int[] numbers; 
     public BitSet(int k){ 
      numbers = new int[(k >> 5) + 1]; 
     } 
     public void set(int k) 
     { 
      int remender = k & 0x1F; 
      int devide = k >> 5; 
      result[devide] = result[devide] | (1<<remender); 
     } 

     public void unset(int k) 
     { 
      int remender = k & 0x1F; 
      int devide = k >> 5; 
      result[devide] = result[devide] & (~(1<<remender)); 
     } 

     public boolean isSet(int k) 
     { 
      int remender = k & 0x1F; 
      int devide = k >> 5; 
      return (result[devide] & (1<<remender))!=0; 
     } 
    } 
+0

आपका परिणाम कहां शुरू हुआ है –

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