jjzjj

Java 获取 BitSet 交集基数的最快方法

下面的函数采用两个BitSets,复制第一个(它不能被覆盖),将副本与第二个相交(按位与)并返回结果的基数。publicintgetIntersectionSize(BitSetbits1,BitSetbits2){BitSetcopy=(BitSet)bits1.clone();copy.and(bits2);returncopy.cardinality();}我想知道这段代码是否可以加速?这个函数被调用了十亿次,所以即使是一微秒的加速也是有意义的,而且我对最快的代码感到好奇。 最佳答案 如果您打算多次使用每个BitSet,则值得

java - 当名义类需要访问修改时无法使用交集类型

接口(interface):interfacePublicCloneable{Objectclone();}interfaceHasPosition{//doesn'tmatter}尝试使用交集类型:@SuppressWarnings("unchecked")EcloneAndIncrementPosition(Eelem){finalEclone=(E)elem.clone();//restomitted}尝试用javac1.8.0_60编译:$javacxx.javaxx.java:13:error:clone()inObjectcannotimplementclone()inPu

java - 在 Java 中使用 retainAll 获取多个列表的交集

我在获取Java上多个列表的交集时遇到了麻烦。我正在做的是:我得到(比方说)3个整数列表:列表1:[2,2,2,2,5,5]列表2:[2,2,103]列表3:[2,431]我将retainAll应用到使用每个剩余列表的第一个:list1.retainAll(list2);list1.retainAll(list3);我得到了这个结果:列表1:[2,2,2,2]但我希望得到这个:列表1:[2]...因为所有列表共享的唯一元素是一个2而不是四个2。我知道这可能是retainAll函数的预期行为,但我需要获得上面提到的结果。有什么帮助吗?编辑:使用HashSet来禁止重复项也无济于事。在这种

java - 如何计算两个以上 HashSet 之间的交集?

考虑到下面的代码以及4个HashSet在别处填充的事实。我的目标是包含所有4个HashSet中共有的所有元素。我的问题是,首先,我做得对吗?其次,如果我做对了,还有更好的方法吗?如果没有,那么我有什么解决方案来解决这个问题?staticSetone=newHashSet();staticSettwo=newHashSet();staticSetthree=newHashSet();staticSetfour=newHashSet();privatestaticvoidcreateIntersectionQrels(){ArrayListtemp=newArrayList();Setin

java - 编码技巧 - 交集类型和 Java 枚举

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭9年前。Improvethisquestion交集类型允许您(有点)做具有继承层次结构的枚举。您不能继承实现,但可以将其委托(delegate)给辅助类。enumFoo1implementsBar{}enumFoo2implementsBar{}classHelperClass{static&Bar>voidfooBar(Ttheenum){}}当您有许多实现某种模式的不同枚举时,这很有用。例如,一些具有父子关系的枚举对。enumPrimar

java获取两个List集合之间的交集、差集、并集

文章目录方式一、jdk8Stream求交集、并集、差集方式二、求交集方式三、collections4.CollectionUtils求交集、差集、并集本文总结一下java中获取两个List之间的交集、补集、并集的几种方式。最常用的通过for循环遍历两个集合的方式在这里就不整理了,主要整理一些已经封装或提供出来的方法。方式一、jdk8Stream求交集、并集、差集利用jdk8的新特性Stream流进行求交集、并集、差集。importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.str

求区间交集的Java算法

我有这样的时间间隔:[5,10]我有更多的时间点列表,长度不同,例如:t1=[3,6,9,10]t2=[2,4,5,6,10]..t1[3,6]是第一个区间,[6,9]是第二个区间,依此类推。t2和其他列表也是如此。现在我需要保存列表,以及与第一个时间间隔相交的特定间隔。例如,在t1中,我有[3,6]与[5,10]、[6,9]相交,与[5,10]等我已经制定了一个算法,但我要处理更多数据,我需要一个快速算法。例如,如果我使用300.000个列表并且每个列表都有200个时间点,我的算法1在大约5-10秒内正常。但如果我有10.000个或更多时间点,算法就会非常慢。我的算法是这样的:Fir

java - java中两个不同对象列表的交集

我有两个具有唯一ID的不同字段的Pojo类。我想执行两个交集List和List.什么是最好的方法。一是我可以简单地迭代两次,但复杂度n2太高了。有更好的方法吗?我可以用比较器来做吗?ClassA{Id,Name,DOB}ClassB{id,aid,location}我有A的列表和B的列表现在想获取A的列表以及在B中的位置 最佳答案 ApacheCommonsCollections有一个方法可以做到这一点:CollectionUtils.intersection.但是,它不使用泛型。还有这个问题:Listintersectioninj

java - 将类文字作为交集类型返回

我有几个实现一些通用接口(interface)的枚举,我想从方法中返回类文字。但是我无法正确指定交集类型。请参阅下面说明问题的代码示例。publicclassGenericsTest{interfaceIface{}enumE1implementsIface{}enumE2implementsIface{}&Iface>ClassgetEnum1(){returnE1.class;//ERRORincompatibletypes:java.lang.Classcannotbeconvertedtojava.lang.Class}Class>getEnum3(){returnE1.cla

java - 查找流交集是否为非空

获取两个流的交集,或者判断它们的交集是否为空在Java中通常是不可能的,因为流只能使用一次,并且通用解决方案有一个复杂性。如果我们对底层供应商的性质一无所知,我们最多可以逃避一个流和一个集合:booleanintersects(finalStreamc1,finalCollectionc2){returnc1.filter(c2::contains).findAny().isPresent();}不过,如果我们的两个供应商都表示使用相同比较器排序的有序集合(在最简单的情况下,Comparable的两个TreeSet>s)?在这种情况下,解决方案将具有线性复杂性(或者更准确地说,,请参阅