二つの配列の共通項を重複なしで抽出せよ

二つの配列の共通項を重複なしで抽出せよ。
とても簡単な問題なように思えるし、実際ゴリゴリ書いていけば私のような初心者でも
十分解けそうだ。ところがこの問題は、意外とゴリゴリやっていたのでは話の割には大変なコード量になってしまう。

import java.util.*; 

public class test { 

  public static void main(String [] args) { 

    int[] shorter,longer; 
    int slen,llen; 

    int[] a = {1,2,3,4,5,5,5}; 
    int[] b = {2,3,4,5}; 

    if(a.length < b.length) { 
      slen = a.length; 
      llen = b.length; 
      shorter = new int[slen]; 
      longer = new int[llen]; 
      System.arraycopy(a, 0, shorter, 0, slen); 
      System.arraycopy(b, 0, longer, 0, llen); 
    } else { 
      slen = b.length; 
      llen = a.length; 
      shorter = new int[slen]; 
      longer = new int[llen]; 
      System.arraycopy(b, 0, shorter, 0, slen); 
      System.arraycopy(a, 0, longer, 0, llen); 
    } 

    Set set = new LinkedHashSet(); 

    for(int i = 0; i < slen; i++){ 
      for(int j = 0; j < llen; j++){ 
        if(shorter[i] == longer[j]){ 
          set.add(new Integer(longer[j])); 
        } 
      } 
    } 

    Object[] ans = set.toArray(); 

    for(int i = 0; i < ans.length; i++){ 
      System.out.println(ans[i]); 
    } 
  } 
} 


ので、高級言語にはこういうことをやるためのメソッドが初めから配列にそなわっていたりする。
が、なんだかなと思っていい方法がないか考えてみた。
考え方は
1.二つの配列のそれぞれの要素の重複を取っておく
2.二つの配列を結合する
3.結合した配列のユニーク要素を削除する
4.ユニーク要素を削除した結合配列の重複を取る
という感じ。


試しにrubyで実装するとこんな感じなのかなと。

a = [1, 2, 3, 5, 2, 5] 
b = [2, 3, 4, 5, 5] 

a = a.uniq 
b = b.uniq 
a = a + b 
c = a.select{|e| a.index(e)!=a.rindex(e)}.uniq 
p c 


まあもちろんrubyだと、a & bでもともと配列の論理積を取れるようになっているのだが。