问题: 两个字符串数组 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;
- }
来源: http://www.bubuko.com/infodetail-2591803.html