Gyakorlati alapok
2 tömb uniója
Az unió során 2 vagy több halmaz úgy képez egy új halmazt, hogy az így létrejövő halmaz az eredeti halmazok összes elemét tartalmazza (de csak egyszer) és más elemet ne tartalmazzon.
Az alábbi példakódban az átláthatóság kedvéért 2 db fix int értékekkel feltöltött tömbből indulunk ki:
int[] tomb1 = new int[] {1, 3, 5, 7, 9, 11};
int[] tomb2 = new int[] {2, 4, 6, 8, 9, 10};
A tomb1 láthatóan növekvő páratlan számokat tartalmaz, míg tomb2 szintén növekvő páros számokat, kivéve 9-et. Az egyesítés a tombUnio-ba kerül, amelynek méretét nem látjuk előre, ezért praktikus megoldás az egyesítendő tömbök méretének összeadásával indulni:
int[] tombUnio = new int[tomb1.length + tomb2.length];
Első lépésben a tombUnio-ba egyszerűen beletesszük tomb1 elemeit, ezzel sincs több gondunk (tombUnio[i] = tomb1[i]).
Az algoritmus 2. köre azt vizsgálja, hogy van-e olyan elem tombUnio-ban, amelyik benne van tomb2-ben is (if (tombUnio[j] == tomb2[i]))? Ehhez egy klasszikus flag-et használunk fel (boolean benneVan = false;). Ha igen, nincs értékátadás, másként pedig a tombUnio-ba belekerülnek tomb2 elemei:
if (benneVan == false) {
tombUnio[index] = tomb2[i];
index++;
}
}
Nézzük meg futtatható Java-kódos változatot:
public class Main {
public static void main(String[] args) {
int[] tomb1 = new int[] {1, 3, 5, 7, 9, 11};
int[] tomb2 = new int[] {2, 4, 6, 8, 9, 10};
int[] tombUnio = new int[tomb1.length + tomb2.length];
for(int i = 0; i < tomb1.length; i++) {
tombUnio[i] = tomb1[i];
}
int index = tomb1.length;
for(int i = 0; i < tomb2.length; i++) {
boolean benneVan = false;
for(int j = 0; j < tombUnio.length; j++) {
if (tombUnio[j] == tomb2[i]) {
benneVan = true;
break;
}
}
if (benneVan == false) {
tombUnio[index] = tomb2[i];
index++;
}
}
for(int i = 0; i < tombUnio.length; i++){
System.out.print(tombUnio[i] + " ");
}
}
}
Végeredmény (például):
1 3 5 7 9 11 13 2 4 6 8 10 12 0
A közös 9 miatt egy tömbindex kiesett (tomb2-ből), ezt a végeredményben 0 érték formájában láthatjuk.