java 两个数组查找出现两次以上相同的值

例:
String str_1[] = {"1","4","3","3","4","4"};
String str_2[] = {"1","4","3","3","4","4"};
查找出相同两次以上的值 如: 3和4
还是不行,没经过测试吧
2楼请麻烦按照我列举的这两个数组进行查找,不要在网上找,谢谢。

package com.akfucc.zhidao;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

/**
* @description: http://zhidao.baidu.com/question/124856697.html 查找出相同两次以上的值 如:
* 3和4
* @author akfucc
* @date Nov 9, 2009
*/
public class P124856697 {
/**
* 查找出相同两次以上的值 如: 3和4
*
* 这里只是简单地将两字符串数组存放在一个HashMap里
*
* @param args
*/
public static void main(String[] args) {
String str_1[] = { "1", "4", "3", "3", "4", "4" };
String str_2[] = { "1", "4", "3", "3", "4", "4" };
method1(str_1, str_2);
}

public static void method1(String[] str_1, String[] str_2) {
// 不讲究效率, 只求结果
Map<String, Integer> map1 = new HashMap<String, Integer>();
Map<String, Integer> map2 = new HashMap<String, Integer>();

// 放入两个MAP
for (String str : str_1) {
Integer temp = map1.get(str);
if (temp == null) {
map1.put(str, 1);
} else {
map1.put(str, temp + 1);
}
}

for (String str : str_2) {
Integer temp = map2.get(str);
if (temp == null) {
map2.put(str, 1);
} else {
map2.put(str, temp + 1);
}
}

// 两个MAP 比较
Set<Entry<String, Integer>> set1 = map1.entrySet();
for (Entry<String, Integer> entry : set1) {
int num1 = entry.getValue().intValue();
if (num1 > 1) {
int num2 = map2.get(entry.getKey()).intValue();
if (num2 > 1) {
// 简单地测试, 仅仅打印出来, 如果你需要的话, 可以用List存放起来
System.out.println(entry.getKey());
}
}
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-09
public static void main(String[] args) {
String str_1[] = {"1","4","3","3","4","4"};
String str_2[] = {"1","4","3","3","4","4"};

Set <String>doub1=new HashSet<String>();//保存在str_1中出现2次以上的
Set <String>set1=new HashSet<String>();//保存 去除 str_1中所有重复的
for(String s: str_1){
if(!set1.add(s)){//如果返回false说明已经存在也就是重复了,添加到doub1中
doub1.add(s);
}
}
Set <String>doub2=new HashSet<String>();
Set <String>set2=new HashSet<String>();
for(String s: str_2){
if(!set2.add(s)){
doub2.add(s);
}
}
doub1.retainAll(doub2);//从doub1中去除不在doub2中出现的,doub1剩余的就是符合条件的
System.out.println(doub1);
}
第2个回答  2009-11-09
在同一元素下标位置相等才算出现相同一次
static public List<T> equalsList(T[] o1,T[] o2,int times){
List<T> list=new ArrayList<T>();
Map<T,Integer> map=new HashMap<T,Integer>();
int length=o1.length<o2.length?o1.length:o2.length;
for(int i=0;i<length;i++){
if(o1[i].equals(o2[i]){
if(map.containsKey(o1[i]) {
int timers=map.get(o1[i]);
map.put(o1[i],timers++);
}//if(map)
else map.put(o1[i],1);
}//if(equals)
}//for
Set<T> set=(Set<T>)map.keySet();
Iterator<T> iterator= (Iterator<T>)set.iterator();
while(iterator.hasNext()){
T the=(T)iterator.next();
int timers=map.get(the);
if(timers>=times) list.add(the);
}//while
return list;
}//static public method
第3个回答  2009-11-09
List list1=Arrays.asList(str_1);
List list2=list1.retainAll(Arrays.asList(str_2));

list2里就是你要的结果

这么可怜,居然不能编译,1.4的是不行。修改为:
List list1=new ArrayList(Arrays.asList(str_1));
List list2=list1.retainAll(new ArrayList(Arrays.asList(str_2)));
相似回答