Нужно найти базовые наборы операций Union / Intersect / Symmetric Difference JAVA - PullRequest
2 голосов
/ 11 апреля 2011

Необходимо завершить реализацию, чтобы использовать класс UseSet. Не уверен, что то, что я реализовал, на 100% правильно.

Однако мне нужна помощь с Union и SysDiff.

public class Set
{
   private ArrayList<Integer> elements;

   public Set()
   {
       elements = null;
   }

   public Set(ArrayList<Integer> s)
   {
       int i;
       elements = new ArrayList<Integer>();
       for(i=0; i<s.size(); i++)
          elements.add(s.get(i));
   }

   public Set(int[] s)
   {
       int i;
       elements = new ArrayList<Integer>();
       for(i=0; i<s.length; i++)
          elements.add(s[i]);
   }

   public String toString()
   {
       //implement this method
   }

   public boolean isElement(int elt)
   {
       int i
    for (i=0; i < elements.size(); i++)
    {
        if (elements.get(i) == elt)
        return true;
    }
    return false

   }

   public int cardinality()
   {
       return elements.size();
   }

   public Set intersect(Set s)
   {
    Array list <interger> iset = new Array(ist<interger>();
    int i;
    for (i=0; i<elements.size(); i++)
    {
        if (s2.isElement (elements.get(i)))
        iSet.add(elements.get(i)));
   }
    return new set(iset)
}

   public Set union(Set s)
   {
       //implement this method
   }

   public Set symDiff(Set s)
   {
       //implement this method
   }

Ответы [ 3 ]

9 голосов
/ 11 апреля 2011

Рассматривали ли вы использование одного из предоставленных Java классов, таких как TreeSet ? Большинство базовых операций над множествами можно реализовать гораздо проще, используя такой класс в качестве отправной точки.

Например:

  • Ваш isElement() метод назван contains() in Set / TreeSet

  • cardinality() является size()

  • intersect может быть реализовано с использованием retainAll()

  • union() может быть реализовано с использованием addAll()

  • symDiff() может быть реализовано с использованием removeAll() для удаления элементов пересечения из объединения двух множеств.

1 голос
/ 11 апреля 2011

См. Документацию Oracle по выполнению операций математического набора с интерфейсом java Set:

http://download.oracle.com/javase/tutorial/collections/interfaces/set.html

Вы можете легко объединять и пересекать.

0 голосов
/ 11 апреля 2011

Java имеет свою базовую реализацию. Для получения дополнительных возможностей попробуйте библиотеку Apache Commons:

Коллекции Commons стремятся опираться на классы JDK, предоставляя новые интерфейсы, реализации и утилиты. Есть много функций, в том числе ...

http://commons.apache.org/collections/

Класс CollectionUtils особенно полезен для вашей задачи (например, addAll:

http://commons.apache.org/collections/api-release/org/apache/commons/collections/CollectionUtils.html#addAll(java.util.Collection,%20java.util.Enumeration).

Вы можете увидеть реализацию и взять идеи здесь:

http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/java/org/apache/commons/collections/CollectionUtils.java?view=markup

...