Java Entfernen von Duplikaten aus einem Array?

Ich soll eine Datei einlesen, die viele verschiedene E-Mail-Adressen enthält, und sie mit einem Array ausdrucken. Das Problem ist, ich muss doppelte E-Mails beseitigen.

Ich konnte meinen Versuch / Fang arbeiten und die E-Mail-Adressen ausdrucken. Ich bin mir jedoch nicht sicher, wie ich die Duplikate entfernen soll. Ich habe kein Verständnis für Hashcodes oder wie man ein Set noch benutzt. Jede Hilfe wäre willkommen.

Hier ist, was ich bisher habe:

 import java.util.Scanner; import java.io.*; public class Duplicate { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); System.out.println("Enter file name: "); String fileName = keyboard.nextLine(); if (fileName.equals("")) { System.out.println("Error: User did not specify a file name."); } else { Scanner inputStream = null; try { inputStream = new Scanner(new File(fileName)); } catch (FileNotFoundException e) { System.out.println("Error: " + fileName + " does not exist."); System.exit(0); } String[] address = new String[100]; int i = 0; while (inputStream.hasNextLine()) { String email = inputStream.nextLine(); // System.out.println(email); address[i] = email; System.out.println(address[i]); i++; } } } } 

   

Die einfache Lösung ist die Verwendung von Java,

Setzen Sie also den doppelten Wert automatisch

und in Ihrem Code haben Sie Array als Array konvertieren, um direkt mit Code zu setzen

 Set mySet = new HashSet(Arrays.asList(someArray)); 

Lernset. Die Zeit, die Sie brauchen, um es zu lernen, ist geringer als die Zeit, die Sie brauchen, um etwas zu programmieren, das es nicht benutzt.

Ich werde dich anfangen. Ersetzen Sie dies:

String[] address = new String[100];

mit diesem:

Set addresses = new HashSet();

Und das:

address[i] = email;

mit diesem:

addresses.add(email);

Du brauchst das i nicht mehr.

Sie sind fertig. Wenn Sie alles ausdrucken möchten:

 for (String address : addresses) { System.out.println (address); } 

Das deckt es ziemlich ab. Soll alles automatisch sortiert werden? Ersetzen Sie den obigen TreeSet durch TreeSet . Jetzt lesen Sie dieses hervorragende Tutorial, damit Sie das nächste Mal alles schneller und eigenständiger erledigen können.

Lies sie stattdessen in ein HashSet . Dies behandelt Duplikate für Sie.

 Set addresses = new HashSet(); addresses.add("a@a.com"); addresses.add("a@a.com"); addresses.add("a@a.com"); System.out.println(addresses.size()); 

Druckt 1 .

Sie können versuchen, jedes Element im Array durchzugehen, indem Sie es zu einem anderen Element hinzufügen und prüfen, ob das zweite Array das nächste Element enthält, wenn es das nächste Element überspringt. Dann ersetzen Sie einfach das erste Array durch das zweite. ( ArrayList ist in diesem Fall jedoch besser).

so etwas wie das:

 List FinalList = new ArrayList(); for(string temp : adress) { if(!FinalList.contains(temp)) FinalList.add(temp); } 

Verwenden Sie die ArrayUtil-class nach Bedarf. Ich habe einige andere Methoden geschrieben als das Entfernen von Duplikaten. Diese class wird ohne Verwendung von Collection-Framework-classn implementiert.

 public class ArrayUtils { /** * Removes all duplicate elements from an array. * @param arr Array from which duplicate elements are to be removed. * @param removeAllDuplicates true if remove all duplicate values, false otherwise * @return Array of unique elements. */ public static int[] removeDuplicate(int[] arr, boolean removeAllDuplicates) { int size = arr.length; for (int i = 0; i < size;) { boolean flag = false; for (int j = i + 1; j < size;) { if (arr[i] == arr[j]) { flag = true; shrinkArray(arr, j, size); size--; } else j++; } if (flag && removeAllDuplicates) { shrinkArray(arr, i, size); size--; } else i++; } int unique[] = new int[size]; for (int i = 0; i < size; i++) unique[i] = arr[i]; return unique; } /** * Removes duplicate elements from an array. * @param arr Array from which duplicate elements are to be removed. * @return Array of unique elements. */ public static int[] removeDuplicate(int[] arr) { return removeDuplicate(arr, false); } private static void shrinkArray(int[] arr, int pos, int size) { for (int i = pos; i < size - 1; i++) { arr[i] = arr[i + 1]; } } /** * Displays the array. * @param arr The array to be displayed. */ public static void displayArray(int arr[]) { System.out.println("\n\nThe Array Is:-\n"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } } /** * Initializes the array with a given value. * @param arr The array to be initialized. * @param withValue The value with which the array is to be initialized. */ public static void initializeArray(int[] arr, int withValue) { for (int i = 0; i < arr.length; i++) { arr[i] = withValue; } } /** * Checks whether an element is there in the array. * @param arr The array in which the element is to be found. * @param element The element that is to be found. * @return True if found false otherwise */ public static boolean contains(int arr[], int element) { for(int i=0; i< arr.length; i++) { if(arr[i] == element) return true; } return false; } /** * Removes a element from an array. * @param arr The array from which the element is to removed. * @param element The element to be removed * @return The size of the array after removing. */ public static int removeElement(int[] arr, int element) { int size = arr.length; for(int i=0; i< arr.length; i++){ if(arr[i] == element){ shrinkArray(arr, i, arr.length); size--; } } return size; } /** * Counts unique elements in an array. * @param arr The required array. * @return Unique element count. */ public static int uniqueElementCount(int arr[]) { int count = 0; int uniqueCount=0; int[] consideredElements = new int[arr.length]; initializeArray(consideredElements, 0); for(int i=0;i 

Verwenden Sie den folgenden Code zum Entfernen von Duplikaten in einem Integer-Array.

 /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package test123; import java.util.ArrayList; import java.util.HashSet; /** * * @author krawler */ public class Test123 { /** * @param args the command line arguments */ public static ArrayList removeDuplicates(ArrayList list) { // Store unique items in result. ArrayList result = new ArrayList<>(); HashSet set = new HashSet<>(); for (Integer item : list) { if (!set.contains(item)) { result.add(item); set.add(item); } } return result; } public static void main(String[] args) { ArrayList list = new ArrayList<>(); list.add(12); list.add(12); list.add(8); list.add(6); list.add(4); list.add(4); list.add(2); list.add(1); //int a[]={12,12,8,6,4,4,2,1} ArrayList unique = removeDuplicates(list); for (int element : unique) { System.out.println(element); } } } /*run: 12 8 6 4 2 1 BUILD SUCCESSFUL (total time: 0 seconds)*/ 

Wenn du Duplikate entfernen möchtest, kannst du Folgendes versuchen:

 String[] address = new String[100]; // the array that contains all addresses ArrayList uniqueAddresses = new ArrayList(); // create arraylist to contain all non-repeated addresses for(String addr : address){ // cycle through the entire array if(!uniqueAddresses.contain(addr)){ // check if the address already there uniqueAddresses.add(addr); // add it } } 

Das erste, was mir in den Sinn kommt, ist, das Array zu sortieren und dann zu prüfen, ob das nächste Element dem aktuellen Element entspricht. Wenn ja, löschen Sie das aktuelle Element.

Oh, und wenn Sie nicht wissen, wie viele E-Mails in der Datei gespeichert sind, ist ein Array wahrscheinlich nicht der beste Weg. Ich würde eine Liste machen, so dass ich mich nicht darum kümmern muss, wie viele E-Mail-Adressen sich in der Datei befinden.

Sie können eine function schreiben, die auf dem Array ausgeführt wird, und eine E-Mail gleichzeitig nehmen. Wenn sie dieselbe Adresse findet, wird sie einfach auf null gesetzt. Wenn Sie mit dem Array arbeiten, um es zu drucken, machen Sie eine Bedingung, um die E-Mail nur zu drucken, wenn sie nicht null ist