replaced Algorythm and made it way faster

This commit is contained in:
BlyDoesCoding 2023-03-24 21:04:32 +01:00
parent a0d2e5b90f
commit c721ba3486
3 changed files with 54 additions and 43 deletions

View file

@ -4,55 +4,49 @@ import java.nio.file.Path;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ThreadedCompare extends Thread {
private final List<Path> pathsToCompareTo;
private final List<Path> pathsToBeCompared;
public ThreadedCompare (List<Path> pathsToBeCompared, List<Path> pathsToCompareTo) {
this.pathsToBeCompared = pathsToBeCompared;
//private HashMap<String, List<Path>> threadFileMap = new HashMap<>();
public ThreadedCompare (List<Path> pathsToCompareTo) {
this.pathsToCompareTo = pathsToCompareTo;
}
@Override
public void run() {
//Compare every File
for (Path file1 : pathsToBeCompared) {
for (Path file2 : pathsToCompareTo) {
try {
if (sameContent(file1, file2)) {
List<Path> bothList = new ArrayList<>();
String md5 = getMD5Sum(file1.toFile());
bothList.add(file1);
bothList.add(file2);
//here it is trying to add the values in the HashMap so everything is nice and clear
Main.fileMap.putIfAbsent(md5, bothList);
if (!bothList.isEmpty()) {
Main.fileMap.get(md5).remove(file1);
Main.fileMap.get(md5).remove(file2);
Main.fileMap.get(md5).addAll(bothList);
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
for (Path file : pathsToCompareTo) {
List<Path> fileArray = new ArrayList<>();
assert fileArray != null;
fileArray.add(file);
String MD5;
try {
MD5 = getMD5Sum(file.toFile());
} catch (IOException e) {
throw new RuntimeException(e);
}
//Update the Progress that can be found in The Main Class
Main.progress += 1;
if (Main.fileMap.containsKey(MD5)) {
fileArray.addAll(Main.fileMap.get(MD5));
Main.fileMap.put(MD5, fileArray);
} else {
Main.fileMap.put(MD5, fileArray);
}
Main.progress++;
}
//Update the thread Completion Counter that can be found in the Main Class
Main.completedThreads += 1;
}
private boolean sameContent(Path file1, Path file2) throws IOException {
if (file1 != file2) {
return Files.mismatch(file1, file2) == -1;
}
return false;
Main.completedThreads++;
}
//this is used to get the MD5 String of one of the files (one of them is just fine since they both have the same value)