有两个数组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中元素的当前位置
那么可以直接对比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!
MiniDog没有重写父类Dog的call方法,因此在调用该方法的时候只是调用了父类该方法的引用,又因geiName方法是私有,不能被继承,因此最终在调用的时候还是调用父类的该方法。