如何求两个数组的交集

有两个数组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方法是私有,不能被继承,因此最终在调用的时候还是调用父类的该方法。
 
 
 

你可能感兴趣的:(java,虚拟机,String,list,Class)