צומת בין שני מערכי שלם

1. סקירה כללית

במדריך מהיר זה, נבחן כיצד לעשות זאת לחשב את הצומת בין שני מערכים שלמים 'א' ו 'ב'.

אנו נתמקד גם כיצד לטפל בערכים כפולים.

לצורך היישום נשתמש זרמים.

2. מנבא חברות למערך

החיתוך של שתי קבוצות הוא בהגדרה מערך עם כל הערכים מאחד, שהם גם חלק מהמערכה השנייה.

לכן אנחנו צריכים a פוּנקצִיָה או ליתר דיוק א לְבַסֵס להחליט על החברות במערך השני. מאז רשימה מספק שיטה כזו מהקופסה, אנו נהפוך אותה ל- רשימה:

Predicate isContainedInB = Arrays.asList (b) :: מכיל; 

3. בניית הצומת

כדי לבנות את המערך המתקבל, נשקול את אלמנטים של הקבוצה הראשונה ברצף ונוודא אם הם גם כלולים במערך השני.אז ניצור מערך חדש המבוסס על זה.

ה זרם API מספק לנו את השיטות הדרושות. ראשית, ניצור זרםואז סנן עם החברות-לְבַסֵס ולבסוף ניצור מערך חדש:

ציבורי סטטי ציבורי שלם [] intersectionSimple (מספר שלם [] a, שלם [] ב) {Return Stream.of (a) .filter (Arrays.asList (b) :: מכיל) .toArray (Integer [] :: new); }

4. כניסות כפולות

מכיוון שמערכים בג'אווה אינם מַעֲרֶכֶת היישום, אנו מתמודדים עם נושא הכניסות הכפולות בקלט ואז בתוצאה. שימו לב שמספר המופעים בתוצאה תלוי בהתרחשויות בפרמטר הראשון.

אך עבור קבוצות, אלמנטים אינם חייבים להתרחש מספר פעמים. אנו יכולים לאחסן זאת באמצעות מוּבהָק() שיטה:

ציבורי סטטי ציבורי [] intersectionSet (מספר שלם [] a, מספר שלם [] ב) {Return Stream.of (a) .filter (Arrays.asList (b) :: contain) .distinct () .toArray (Integer [] :: חָדָשׁ); }

כך שאורך הצומת כבר לא תלוי בסדר הפרמטר.

עם זאת, הצומת של מערך עם עצמו לא יכול להיות המערך שוב מכיוון שאנו מסירים ערכים כפולים.

5. צומת רב-סטתי

תפיסה כללית יותר, המאפשרת כניסות שוות מרובות, הן רב-סטים. עבורם, הצומת מוגדר אז על ידי מספר מינימלי של התרחשויות קלט. אז החברות שלנו-לְבַסֵס חייבים לשמור ציון באיזו תדירות אנו מוסיפים אלמנט לתוצאה.

ה לְהַסִיר() ניתן להשתמש בשיטה זו, המחזירה את החברות ומכלה את האלמנטים. אז אחרי הכל אלמנטים שווים ב 'ב' נצרכים, לא מוסיפים עוד אלמנטים שווים לתוצאה:

ציבורי סטטי ציבורי [] intersectionSet (מספר שלם [] a, מספר שלם [] ב) {החזר Stream.of (a) .filter (רשימת קישורים חדשה (Arrays.asList (b)) :: הסר) .toArray (שלם [] :: חָדָשׁ); } 

מאז מערכים ממשק API מחזיר רק שינוי רשימה, עלינו ליצור הקדשה משתנה.

6. מסקנה

במאמר זה ראינו כיצד להשתמש ב- מכיל ו לְהַסִיר שיטות ליישום צומת לשני מערכים בג'אווה.

כל המימוש, קטעי הקוד והמבחנים ניתן למצוא במאגר GitHub שלנו - זהו פרויקט מבוסס Maven, כך שיהיה קל לייבא ולהפעיל אותו כפי שהוא.


$config[zx-auto] not found$config[zx-overlay] not found