找出两个字符串数组中的相同元素
public static List<String> getAllSameElement1(String[] strArr1,String[] strArr2) { if(strArr1 == null || strArr2 == null) { return null; } List<String> strList1 = new ArrayList<String>(Arrays.asList(strArr1)); //----------代码段1 List<String> strList2 = new ArrayList<String>(Arrays.asList(strArr2)); //--------------代码段2 strList1.retainAll(strList2); return strList1; }
另一种实现,数组比较大的情况下
- 由 于最近看见一文章,是描述数据库mergeJoin 的扫描方式的,仿照里面的大致逻辑自己写了<br>
- 个类似的方法。如果数组大的话,这个要比getAllSameElement1好
-
- 大致思路是:1.首先将两个数组A、B排序(递增)<br>
- 2.分别从A和B中各取出一元素a,b,对a和b进行比 较:<br>
- 1) 如果a与b相等,则将a或b存入一指定集合中<br>
- 2)如果a小于b,则继续取A的下一元素,再与b比 较<br>
- 3) 如果a大于b,则取B的下一个元素,与a进行比较<br>
- 3.反复进行步骤2,知道A或B的元素都比较完<br>
- 4.返回集合(存了相同的元素)<br>
public static List<String> getAllSameElement2(String[] strArr1,String[] strArr2) { if(strArr1 == null || strArr2 == null) { return null; } Arrays.sort(strArr1); Arrays.sort(strArr2); List<String> list = new ArrayList<String>(); int k = 0; int j = 0; while(k<strArr1.length && j<strArr2.length) { if(strArr1[k].compareTo(strArr2[j])==0) { if(strArr1[k].equals(strArr2[j]) ) { list.add(strArr1[k]); k++; j++; } continue; } else if(strArr1[k].compareTo(strArr2[j])<0){ k++; } else { j++; } } return list; }