Collection A =new ArrayList();
A.add("a");
A.add("b");
A.add("a");
A.add("b");
A.add("c");
Collection B =new ArrayList();
B.add("c");
B.add("a");
B.add("a");
B.add("d");
B.add("b");
B.add("b");
B.add("b");
在此之后,A={"a", "b", "a", "b", "c"} ,B={"c", "a", "a", "d", "b", "b", "b"}。
我想问的是如何写程序,构造一个sameCount()方法,来求出A与B中具有相同个数的元素的最大值?本题中A中与B中均各有两个a和一个c。故最终结果为2.
A.add("a");
A.add("b");
A.add("a");
A.add("b");
A.add("c");
Collection B =new ArrayList();
B.add("c");
B.add("a");
B.add("a");
B.add("d");
B.add("b");
B.add("b");
B.add("b");
在此之后,A={"a", "b", "a", "b", "c"} ,B={"c", "a", "a", "d", "b", "b", "b"}。
我想问的是如何写程序,构造一个sameCount()方法,来求出A与B中具有相同个数的元素的最大值?本题中A中与B中均各有两个a和一个c。故最终结果为2.
List list = new ArrayList(Arrays.asList(a1));
list.retainAll(Arrays.asList(a2)); // list 中的就是交集了.
public static int count(Collection<String> A, Collection<String> B){
A.retainAll(B);
Set<String> set=new HashSet<String>(A);
return set.size();
}
public static void main(String[] args) {
Collection A =new ArrayList();
A.add("a");
A.add("b");
A.add("a");
A.add("b");
A.add("c");
Collection B =new ArrayList();
B.add("c");
B.add("a");
B.add("a");
B.add("d");
B.add("b");
B.add("b");
B.add("b");
System.out.println(sameCount(A, B)); }
public static int sameCount(Collection c1, Collection c2)
{
int count = 0;
Map<Object, Integer> map1 = new HashMap<Object, Integer>();
Map<Object, Integer> map2 = new HashMap<Object, Integer>();
for(Object o : c1){
int value = map1.get(o) == null ? 0 : map1.get(o) + 1;
map1.put(o, value);
}
for(Object o : c2){
int value = map2.get(o) == null ? 0 : map2.get(o) + 1;
map2.put(o, value);
}
for(Object o : map1.keySet()){
if(map2.containsKey(o)){
if(map1.get(o) == map2.get(o)){
count++;
}
}
}
return count;
}
public class GetSameCount {
public static void main(String[] args) {
String[] str1={"a", "b", "a", "b", "c"};
//ArryList<String> list=Array.asList(str1);
Collection A =new ArrayList();
for(int i=0;i<str1.length;i++)
A.add("a");
A.add("b");
A.add("a");
A.add("b");
A.add("c");
Collection B =new ArrayList();
B.add("c");
B.add("a");
B.add("a");
B.add("d");
B.add("b");
B.add("b");
B.add("b");
System.out.println(sameCount(A, B)); } public static int sameCount(Collection c1, Collection c2)
{
int count = 0;
Map<Object, Integer> map1 = new HashMap<Object, Integer>();
Map<Object, Integer> map2 = new HashMap<Object, Integer>();
for(Object o : c1){
int value = map1.get(o) == null ? 0 : map1.get(o) + 1;
map1.put(o, value);
}
for(Object o : c2){
int value = map2.get(o) == null ? 0 : map2.get(o) + 1;
map2.put(o, value);
}
for(Object o : map1.keySet()){
if(map2.containsKey(o)){
if(map1.get(o) == map2.get(o)){
count++;
}
}
}
return count;
}}
这个程序运行之后,得出的结果是1,不是2啊,我找不出错误在哪?
import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;
public class GetSameCount {
public static void main(String[] args) {
Collection A =new ArrayList();
A.add("a");
A.add("b");
A.add("a");
A.add("b");
A.add("c");
Collection B =new ArrayList();
B.add("c");
B.add("a");
B.add("a");
B.add("d");
B.add("b");
B.add("b");
B.add("b");
System.out.println(count(A,B));
}
public static int count(Collection<String> A, Collection<String> B){
A.retainAll(B);//取A和B两集合的交集。
Set<String> set=new HashSet<String>(A);
return set.size();
}
}
但在运行后, Set<String> set=new HashSet<String>(A); 这一行出现错误不知如何调试,请教之!
另外,你把Set <String> set=new HashSet <String>(A); 这里面多余的空格去掉
就像:Set<String> set=new HashSet<String>(A);
Set<String> set=new HashSet<String>(A);
我这个程序运行的结果确实是2,完全按照你的需求做的。取交集不满足你的需求,得出的结果是『a,b,c』,结果等于3.
比如:A={“a”“b”“a”“b”“c”};B={“c”“a”“a”“d”“b”“b”“b”};
A与B中具有相同个数的相同元素是“a”与“c”。这两个元素。结果自然为2.
public static int find(Collection<String> coll1, Collection<String> coll2){
coll1.retainAll(coll2);
Map<String, Integer> m = new HashMap<String, Integer>();
for (String c:coll1) {
m.put(c, m.get(c) == null ? 1 : m.get(c) + 1);
}
return Collections.max(m.values());
}