如何求两个数组的交集

有两个数组a{1,5,8,10,14,15,17,18,20,22,24,25,28}和b{2,4,6,8,10,12},如何求出他们之间的交集?要求效率越高越好
注:数组都是从小到大排序好的

 

 

既然是排序好的,
那么可以直接对比a和b的元素
i,j是a,b中元素的当前位置
Java code
while(i<a.length && j < b.length) { if(a[i] < b[j]) { i++; } else if (a[i] == b[j]) { 输出这个元素; i++; j++; } else { j++; } }
List   list   =   new   ArrayList(Arrays.asList(a));   
list.retainAll(Arrays.asList(b));   //   list   中的就是交集了.
Java code 
public class Test { public static void main(String[] args) { Dog dog = new Dog(); dog.call(); MiniDog mini = new MiniDog(); mini.call(); Dog d = (Dog) mini; d.call(); } } public class Dog { private String getName(){ return "Dog"; } public String bark(){ return "wang-wang"; } public void call(){ System.out.println("I'm " + getName() + " " + bark()); } } public class MiniDog extends Dog { private String getName(){ return "Mini"; } public String bark(){ return "WOO"; } }


如上,输出结果是什么?正确结果是:
I'm Dog wang-wang
I'm Dog WOO
I'm Dog WOO
第一条没什么争议,第二条谁能解释一下为什么,最好是能说明白在虚拟机内部的结构。thank you!
引用 5 楼 lovehope 的回复:
MiniDog没有重写父类Dog的call方法,因此在调用该方法的时候只是调用了父类该方法的引用,又因geiName方法是私有,不能被继承,因此最终在调用的时候还是调用父类的该方法。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值