有两个数组a{1,5,8,10,14,15,17,18,20,22,24,25,28}和b{2,4,6,8,10,12},如何求出他们之间的交集?要求效率越高越好
注:数组都是从小到大排序好的
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方法是私有,不能被继承,因此最终在调用的时候还是调用父类的该方法。