返回两个集合的交集的不同签名方法(Java)

3

我创建了一个方法来返回两组值的交集。问题是我想使用不同的签名,只在方法内使用一个arrayList而不是全部。

public class Group <T>
{     
  ArrayList<T> w = new ArrayList<T>();

  //Here I have the add and remove methods and a method  that returns 
  //false if the item is not in the set and true if it is in the set

  public static ArrayList intersection(Group A, Group B) 
  {
    ArrayList list = new ArrayList();
    ArrayList first = (ArrayList) A.w.clone();
    ArrayList second = (ArrayList) B.w.clone();


    for (int i = 0; i < A.w.size(); i++) 
    {
        if (second.contains(A.w.get(i))) 
        {
            list.add(A.w.get(i));
            second.remove(A.w.get(i));
            first.remove(A.w.get(i));
        }
    }
    return list;
  }
}

这是另一种带有不同参数的方法。如果与上述方法不同,我该如何使该方法返回两个集合的交集?

public class Group <T>
{
   ArrayList<T> w = new ArrayList<T>();

   public static <T> Group<T> intersection(Group <T> A, Group <T> B)
   {
       Group<T> k= new Group<T>();


     return  k;
    }
}

public class Main
{
     public static void main(String [] args)
     {
         Group<Integer> a1 = new Group<Integer>();
         Group<Integer> b1 = new Group<Integer>();
         Group<Integer> a1b1 = new Group<Integer>();


         //Here I have more codes for input/output 
      }
 }

你不应该使用原始类型,并且参数 AB 应该小写。 - David Conrad
1个回答

3

在Java中,你不能通过返回值来重载方法 - 你需要重命名其中一个。例如:

public static <T> Group<T> intersectionGroup(Group <T> A, Group <T> B)

public static ArrayList intersectionArrayList(Group A, Group B) 

我不打算将两种方法集成在一起。我只想知道如何创建一个具有不同签名的类似方法。 - Plrr
@Plrr 我认为他已经回答了你——你不能这样做。在Java中这是不合法的。抱歉。 - ajb
@ajb 在Java中,“illegal”究竟是什么意思? - Plrr
在同一个类中使用相同的名称和参数类型(在泛型类型擦除之后)声明两个方法。 即使结果类型不同也要这样做。 - ajb
@ajb,我不确定你是否误解了问题的意思,但我从未打算在同一个类中使用“两种”方法。我只是想知道如何使用不同的签名“重新编写”第一个方法。至于在同一个类中声明两个方法,我知道这在Java中是不允许的,就像你之前所说的一样。 - Plrr
@Plrr 我知道我不是唯一一个误解的人。你在问题中提到的两个intersection方法都属于名为Group的类,所以看起来你想在同一个类中声明这两个方法。你的其中一个类应该有不同的名称吗? - ajb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接