Arrays vergleichen

DuffCola

Aktives Mitglied
Was ist der beste Algorithmus, wenn ich 2 String Arrays habe,
im 1. steht "aaa", "bbb", "ccc",
im 2. steht "fff", "ccc", "hhh", "aaa", "bbb",
ich will jetzt eine Methode haben, die true zurückgibt wenn das 2. Array die Elemente vom 1. Array beinhaltet, egal welche Rhein folge und das 2. Array kann noch zusätzlich irgendwelche anderen Elemente beinhalten.
Das beispiel oben sollte true zurückgeben.
Wenn ich das verscuhe, habe ich einen föllig unübersichtlichen und Fehleranfälligen Block mit Code.
Gibts da nicht schon eine Hilfsklasse?
 
Zuletzt bearbeitet:

stg

Top Contributor
Dann zeig doch mal deinen Block. Du musst doch nur für jedes Element des ersten Arrays alle Elemente des zweiten Arrays einmal anschauen, und prüfen, ob du es dort irgendwo findest.
Im wesentlichen sind das einfach zwei ineinander geschachtelte Schleifen.
 

Ruzmanz

Top Contributor
Es gibt keinen "besten" Algorithmus für solche Probleme. Es hängt immer von den Daten ab und ob die Lösung schnell oder Speichereffizient sein sollte.

Wenn die Anzahl der zu vergleichenden Wörter egal ist, dann lohnt sich ein HashSet. Bsp:

arr1: "aaa", "aaa"
arr2: "aaa", "bbb"

Dabei packst du alle Daten von arr2 in ein HashSet und gehst in einer Schleife dein erstes Array durch und prüfst dann, ob die Daten im HashSet drinnen sind.

Wenn die Anzahl der vergleichenden Wörter nicht egal ist, dann lohnt sich eine HashMap. Dabei ist dein Schlüssel das Wort und dein Value die Häufigkeit.

Bei einer kleinen Datenmenge lohnt es sich nicht. Ich habe die beiden Algorithmen schnell runtergetippt:

Java:
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Sample {
	
	public static void main(String[] args) {
		System.out.println("Doppelte prüfen:");
	    System.out.println(check1(new String[] {"AAA", "AAA", "BBB"}, new String[] {"AAA", "BBB", "CCC"}));
	    System.out.println(check1(new String[] {"AAA", "AAA", "BBB"}, new String[] {"AAA", "AAA", "BBB", "CCC"}));
	    System.out.println(check1(new String[] {"AA2"}, new String[] {"AA3"}));

	    System.out.println("\nDoppelte nicht prüfen:");
	    System.out.println(check2(new String[] {"AAA", "AAA", "BBB"}, new String[] {"AAA", "BBB", "CCC"}));
	    System.out.println(check2(new String[] {"AAA", "AAA", "BBB"}, new String[] {"AAA", "AAA", "BBB", "CCC"}));
	    System.out.println(check2(new String[] {"AA2"}, new String[] {"AA3"}));
	}
	
	public static boolean check1(String[] arr1, String[] arr2) {
		boolean retval = true;
		Map<String, Integer> hashMap = new HashMap<>();
		Integer i;
		
		for(String s: arr2) {
			i = hashMap.get(s);
			
			if(i == null) {
				hashMap.put(s, 1);
			} else {
				hashMap.put(s, ++i);
			}
		}
		
		for(String s: arr1) {
			i = hashMap.get(s);
			if(i != null && i > 0) {
				hashMap.put(s, --i);
			} else {
				retval = false;
				break;
			}
		}
		
		return retval;
	}
	
	public static boolean check2(String[] arr1, String[] arr2) {
		boolean retval = true;
		
		Set<String> hasSet = new HashSet<>();
		
		for(String s: arr2) {
			hasSet.add(s);
		}
		
		for(String s: arr1) {
			if(!hasSet.contains(s)) {
				retval = false;
                                break;
			}
		}
		
		return retval;
	}
  }
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Wenn die Arrays wirklich nur so klein sind und man keine wirklichen Performanceprobleme o.ä. hat, reicht evtl. auch ein Einzeiler (je nachdem wie nun doppelte behandelt werden sollen):
Java:
System.out.println(Arrays.asList(arr2).containsAll(Arrays.asList(arr1)));
(oder eben direkt Listen verwenden :D)

@Ruzmanz: Du kannst übrigens auch einfach ein return false; zurückgeben in deinen Methoden, das erspart dir im ersten Fall das eklige break und in deiner zweiten Methoden das unnötige weiteriterieren ;)
 
Zuletzt bearbeitet:

Ruzmanz

Top Contributor
@Ruzmanz: Du kannst übrigens auch einfach ein return false; zurückgeben in deinen Methoden, das erspart dir im ersten Fall das eklige break und in deiner zweiten Methoden das unnötige weiteriterieren

Break ist jetzt ergänzt. Hatte zuerst überlegt, aber mich dann spontan dagegen entschieden. Mehrere returns sind mMn genau so Code Smell wie breaks. Da ich jetzt nicht unbedingt meine Zeit damit verbringen wollte nach eine dritten Lösung zu suchen, habe ich das so gelassen ;)

PS: Ausnahmen bestätigen die Regel. Sofern z.B. die Methode nicht mehr geändert wird und die Lesbarkeit gegen ist, würde ich das auch machen. Gegen containsAll ist z.B. nichts auszusetzen:

Java:
    public boolean containsAll(Collection<?> c) {
        for (Object e : c)
            if (!contains(e))
                return false;
        return true;
    }

Ich gehe aber davon aus, dass der TE noch ein paar Kriterien in die Methoden reinpackt ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
R Werte und Reihenfolge in 2d Arrays vergleichen Java Basics - Anfänger-Themen 5
N 2D Arrays jedes xy vergleichen Java Basics - Anfänger-Themen 7
J zwei String Arrays miteinander vergleichen Java Basics - Anfänger-Themen 18
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
A Methoden Char-Arrays auf aufeinanderfolgende Elemente vergleichen! Java Basics - Anfänger-Themen 7
J 2 Arrays vergleichen (Unterschiedliche Längen) Java Basics - Anfänger-Themen 42
Shizmo Arrays miteinander vergleichen Java Basics - Anfänger-Themen 22
D Erste Schritte Arrays vergleichen Java Basics - Anfänger-Themen 1
R 2 mit Arrays bestückte LinkedLists durchsuchen/vergleichen Java Basics - Anfänger-Themen 3
J arrays vergleichen Java Basics - Anfänger-Themen 6
1 Zeichenfolgen in Arrays vergleichen Java Basics - Anfänger-Themen 8
1 Elemente von 2 Arrays vergleichen Java Basics - Anfänger-Themen 12
D Methoden Arrays vergleichen Java Basics - Anfänger-Themen 10
N Arrays miteinander vergleichen Java Basics - Anfänger-Themen 11
J 2 Arrays vergleichen Java Basics - Anfänger-Themen 16
J Inhalt eines Arrays vergleichen? Java Basics - Anfänger-Themen 8
Fab1 char Arrays vergleichen Java Basics - Anfänger-Themen 4
R Erste Schritte Arrays vergleichen und boolean Java Basics - Anfänger-Themen 5
E Elemente innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 7
J Dimensionen zweier Arrays vergleichen Java Basics - Anfänger-Themen 4
M 2 Arrays mit komplexen Datentyp vergleichen Java Basics - Anfänger-Themen 8
C Arrays vergleichen und Fehlinhalt ausgeben Java Basics - Anfänger-Themen 5
J Zeilen eines Arrays vergleichen Java Basics - Anfänger-Themen 2
N Arrays als Mengen vergleichen Java Basics - Anfänger-Themen 5
J arrays vergleichen Java Basics - Anfänger-Themen 3
T Arrays vergleichen Java Basics - Anfänger-Themen 5
V Inhalt von arrays vergleichen Java Basics - Anfänger-Themen 6
R String Arrays Inhalte vergleichen Java Basics - Anfänger-Themen 4
M Arrays vergleichen Java Basics - Anfänger-Themen 2
H Mehrdimensionale Arrays vergleichen Java Basics - Anfänger-Themen 6
P arrays vergleichen geht nicht? Java Basics - Anfänger-Themen 3
B Vergleichen von Arrays Java Basics - Anfänger-Themen 3
D Arrays vergleichen (oder wie man das auch nennen will). Java Basics - Anfänger-Themen 13
J Mehrdimensionale Arrays inhaltlich vergleichen. Java Basics - Anfänger-Themen 3
M Felder innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 2
N Mischen und vergleichen von Arrays Java Basics - Anfänger-Themen 6
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste und Arrays Java Basics - Anfänger-Themen 12
N mehrdimensionale arrays Java Basics - Anfänger-Themen 12
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
S Hilfe bei Praktischen Aufgaben von Arrays Java Basics - Anfänger-Themen 39
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
J Mehrdimensionale Arrays Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
M Arrays Java Basics - Anfänger-Themen 3
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
Ostkreuz Summieren von Arrays Java Basics - Anfänger-Themen 4
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
rosima26 Geordnete Arrays ausgeben Java Basics - Anfänger-Themen 31
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
E Zinsrechnung mithilfe von Arrays Java Basics - Anfänger-Themen 12
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
H Arrays befüllen Java Basics - Anfänger-Themen 43
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
D Arrays Java Basics - Anfänger-Themen 9
C Java Arrays - Ausgabe in Methode Java Basics - Anfänger-Themen 12
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
N Arrays Java Basics - Anfänger-Themen 5
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
U zwei 2D arrays auf gleich sein überprüfen Java Basics - Anfänger-Themen 14
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
A Arrays aufsummieren Java Basics - Anfänger-Themen 11
C Wie 2 Arrays zusammenfügen und sortieren? Java Basics - Anfänger-Themen 11
S Arrays aneinanderketten Java Basics - Anfänger-Themen 20
Sinan Arrays auflisten ohne Wiederholung Java Basics - Anfänger-Themen 28
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
D Verschlüsslungsaufgabe / Arrays Java Basics - Anfänger-Themen 6
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
S zweidimensionale char arrays Java Basics - Anfänger-Themen 14
J Methoden Mehrdimensionale Arrays übereinander legen Java Basics - Anfänger-Themen 5
D Verwirrung bei Streams aus primitiven Arrays Java Basics - Anfänger-Themen 2
P Arrays mit verschiedenen Längen miteinander dividieren. Java Basics - Anfänger-Themen 1
P Wie kann ich die Zahlen dieses Arrays dividieren? Java Basics - Anfänger-Themen 2
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
Zeppi Arrays[i] Java Basics - Anfänger-Themen 7
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
J B-Sprache mit Arrays ausführen Java Basics - Anfänger-Themen 18
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
K Sudoku mit 2D Arrays Java Basics - Anfänger-Themen 19
T Vertikales Histogramm mit Arrays Java Basics - Anfänger-Themen 3
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben