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.

解决方案 »

  1.   


    List   list   =   new   ArrayList(Arrays.asList(a1));  
    list.retainAll(Arrays.asList(a2));   //   list   中的就是交集了.  
        
      

  2.   


    public static int count(Collection<String> A, Collection<String> B){
             A.retainAll(B);
     Set<String> set=new HashSet<String>(A);
             return set.size();
       }
      

  3.   


    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;

    }
      

  4.   

    import java.util.*;import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;
    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啊,我找不出错误在哪?
      

  5.   

    引用3楼的程序,编程如下
    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); 这一行出现错误不知如何调试,请教之!
      

  6.   

    import java.util.HashSet; 
    另外,你把Set <String> set=new HashSet <String>(A); 这里面多余的空格去掉
    就像:Set<String> set=new HashSet<String>(A);
      

  7.   

    shit!
    Set<String> set=new HashSet<String>(A); 
      

  8.   

    汗死!Set<String> set=new HashSet<String>(A); 
      

  9.   

    原来是HashSet;包没有导入,谢谢!!!
      

  10.   


    我这个程序运行的结果确实是2,完全按照你的需求做的。取交集不满足你的需求,得出的结果是『a,b,c』,结果等于3.
      

  11.   

    James.zhan 你说的是正确的,你的程序运行结果也是正确的。多谢,朋友!
      

  12.   

    程序运行结果是3而正确结果是2.单纯的取交集并不能得出正确结果。取交集只是得到A与B中的相同元素,而我的题目中要求的是A与B中具有相同个数的相同元素的个数。
    比如:A={“a”“b”“a”“b”“c”};B={“c”“a”“a”“d”“b”“b”“b”};
    A与B中具有相同个数的相同元素是“a”与“c”。这两个元素。结果自然为2.
      

  13.   

    util包中的类应该多了解一下,做到熟练的程度
      

  14.   

    这样简单些吧
    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());
      }