سؤال

هل هناك أي وظيفة المدمج في لعمليات مجموعة الكلاسيكية على الطبقة java.util.Collection؟ ومن شأن التنفيذ بلدي معين يكون لArrayList، ولكن هذا يبدو وكأنه شيء التي ينبغي تطبيقها لجميع الفئات الفرعية للمجموعة. أنا أبحث عن شيء مثل:

ArrayList<Integer> setA ...
ArrayList<Integer> setB ...
ArrayList<Integer> setAintersectionB = setA.intersection(setB);
ArrayList<Integer> setAminusB = setA.subtract(setB);

وبعد بعض البحث، وكنت قادرا على إيجاد حلول نابعة من الداخل فقط. أيضا، وأنا أدرك أنني يمكن الخلط بين فكرة "مجموعة" مع فكرة وجود "مجموعة"، وعدم السماح والسماح التكرارات على التوالي. ربما هذا هو وظيفة عادلة حقا للواجهة مجموعة؟

في حالة أن لا أحد يعرف من أي وظيفة مدمجة، وربما يمكن أن نستخدم هذه كمستودع للجافا ممارسة كود تشغيل مجموعة قياسية؟ أتصور هذه العجلة تم اختراع عدة مرات.

هل كانت مفيدة؟

المحلول

ويتم تقاطع مع Collection.retainAll. الطرح مع Collection.removeAll. الاتحاد مع Collection.addAll. في كل حالة، كما Set سوف تتصرف مثل مجموعة وسوف List تتصرف مثل قائمة.

وأما الأشياء قابلة للتغيير، إلا أنها تعمل في المكان. سوف تحتاج إلى نسخ صراحة إذا كنت ترغب في الاحتفاظ الكائن قابلة للتغيير الأصلي unmutated.

نصائح أخرى

وأوصي جوجل الجوافة . و مجموعات يبدو فئة لديك بالضبط ما كنت أبحث عنه. أنه يحتوي على <لأ href = "https://google.github.io/guava/releases/snapshot-jre/api/docs/com/google/common/collect/Sets.html#intersection-java.util.Set- java.util.Set- "يختلط =" نوفولو noreferrer "> تقاطع طريقة و<لأ href =" https://google.github.io/guava/releases/snapshot-jre/api/docs/com /google/common/collect/Sets.html#difference-java.util.Set-java.util.Set- "يختلط =" نوفولو noreferrer "> الفرق الأسلوب.

هذا العرض وربما شيء كنت ترغب في مشاهدة إذا كنت مهتما. وهو يشير إلى مجموعات جوجل، والذي كان اسمه الأصلي الجوافة و.

هل تبحث عن java.util.Set اجهة (وHashSet تطبيقات وTreeSet (مرتبة)) منتديات وتعرف واجهة removeAll (مجموعة ج) الذي يبدو وكأنه substract ()، وretainAll (مجموعة ج) الذي يشبه التقاطع.

لعمليات قابلة للتغيير رؤية الإجابة المقبولة.

للحصول على البديل imutable يمكنك القيام بذلك مع جافا 8

والطرح

set1
  .stream()
  .filter(item-> !set2.contains(item))
  .collect(Collectors.toSet())

وتقاطع

set1
  .stream()
  .filter(item-> set2.contains(item))
  .collect(Collectors.toSet())
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top