問題:兩個字符串數組A和B,尋找相同元素的方法 ?注意:A、B數組都比較大
第一種::比較A、B找出B與A中不相同的元素,然后再用B減去B與A中不相同的元素即可。
得到的就是A、B中相同的元素。
第二種:利用Map集合的性質,把數組A的數據作為map的key和value, 然后用B的數據取值,不為NULL,說明相同。
下面直接上代碼
/** * 基本思路:相同 = 集合B-(集合B-集合A中相同的=不相同的) * * @return */ public List<String> getSameList(String[] strArr1, String[] strArr2) { // 數組A List<String> coll = Arrays.asList(strArr1); // 數組B List<String> coll2 = Arrays.asList(strArr2); // 數組B的list List<String> alter0 = new ArrayList<String>(coll2); // 數組A的List List<String> alter1 = new ArrayList<String>(coll); // 數組B與A不同的元素的List List<String> alter2 = new ArrayList<String>(coll2); // B中去掉A中相同的元素 alter2.removeAll(alter1); // 數組BList -B中和A不用的List=相同的 alter0.removeAll(alter2); Iterator<String> it2 = alter0.iterator(); while (it2.hasNext()) { System.out.println("數組AB中相同的元素" + it2.next()); } return alter0; } /** * 把數組A的數據作為map的key和value, 然后用B的數據取值,不為NULL,說明相同 * * Map接口 Map提供了一種映射關系,其中的元素是以鍵值對(key-value)的形式存儲的,能夠實現根據key快速查找value; * Map中的鍵值對以Entry類型的對象實例形式存在; * 建(key值)不可重復,value值可以重復,一個value值可以和很多key值形成對應關系,每個建最多只能映射到一個值。 * Map支持泛型,形式如:Map<K,V> Map中使用put(K key,V value)方法添加 * * HashMap類 HashMap是Map的一個重要實現類,也是最常用的,基於哈希表實現 HashMap中的Entry對象是無序排列的 * Key值和value值都可以為null,但是一個HashMap只能有一個key值為null的映射(key值不可重復) * */ public List<String> getSameElementByMap(String[] strArr1, String[] strArr2) { // HashMap key值 不可重復 Key值和value值都可以為null HashMap<String, Object> map = new HashMap<String, Object>(); // 數組A中的元素放入Map中 for (String string1 : strArr1) { map.put(string1, string1); } List<String> list = new ArrayList<String>(); // 用數組B元素做為Key來取值,如為NULL則說明相同 for (String string2 : strArr2) { Object j = map.get(string2); if (j != null) { list.add(string2); // System.out.println("數組AB中相同的元素: "+j.toString()); } } return list; }