Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java位集、子集与交集_Java_Bitset - Fatal编程技术网

Java位集、子集与交集

Java位集、子集与交集,java,bitset,Java,Bitset,我在Java中使用位集类来处理位集。 在比较两个位集时,我需要明确区分子集和交集的概念 让我们看一个使用AND运算符获取子集的示例: BitSet bits1 = new BitSet(); BitSet bits2 = new BitSet(); bits1.set(0,2,true); //110 bits2.set(1); //010 //010 is a SUBSET of 110 bits1.and(bits2); /

我在Java中使用位集类来处理位集。 在比较两个位集时,我需要明确区分子集交集的概念

让我们看一个使用AND运算符获取子集的示例:

    BitSet bits1 = new BitSet();
    BitSet bits2 = new BitSet();
    bits1.set(0,2,true); //110
    bits2.set(1);        //010
    //010 is a SUBSET of 110
    bits1.and(bits2);    //bits1 became the result of the and operator
    if(bits1.equals(bits2))
    {
        System.out.println(bits2 + " is a subset of " + bits1);
    }
    //PRINT

    BitSet bits4 = new BitSet();
    bits4.set(0,2,true); //110
    BitSet bits3 = new BitSet();
    bits3.set(1,3,true); //011
    bits4.and(bits3);
    //011 is NOT a subset of 110
    if(bits4.equals(bits3))
    {
        System.out.println(bits4 + " is a subset of " + bits3);
    }
    //NO PRINT
子集非常清楚,因为我使用AND运算符来验证一个位集是否是另一个位集的子集

与内置交叉口操作符的示例相同:

    BitSet bits1 = new BitSet();
    BitSet bits2 = new BitSet();
    bits1.set(0,2,true); //110
    bits2.set(1);        //010
    //010 intersect 110, but is also a subset of 110
    System.out.println("Intersection? " + bits2.intersects(bits1));

    BitSet bits3 = new BitSet();
    bits3.set(1,3,true); //011
    //011 VS 110 intersection only
    System.out.println("Intersection? " + bits3.intersects(bits1));
这是我的问题:操作符交集同时检测子集和交集。 我的目标是只检测交叉点,不包括那些也是子集的交叉点,如第二个示例中的位s1与位s2。所以这个操作符不适合我的情况,因为它太一般了。
是否有方法检测此属性?

以位s1、位s2和位s1.and(位s2)为基数。如果and基数为非零,则集合相交。如果它也等于位s1基数,则位s1是位s2的子集,反之亦然

因此,使用基数,您可以根据需要检查子集关系(但它似乎不会比您在回答中提到的检查快多少,并且可以合并)