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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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());




参考技术A 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);
参考技术B 在同一元素下标位置相等才算出现相同一次
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
参考技术C 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)));

以上是关于java 两个数组查找出现两次以上相同的值的主要内容,如果未能解决你的问题,请参考以下文章

C#:如何查找两个字符串数组是不是包含相同的值

js数组方法——找出两数组中不相同的元素的集合

luogu4113 [HEOI2012]采花

java中怎么取两个数组中不相同的数据?

找出两个数组中相同的元素,不排序直接两次循环取出

java 字符串数组如何去掉相同元素