From 6ee0daefd5cf2ac42530ee8bad06aefdd140b215 Mon Sep 17 00:00:00 2001 From: TurinTech Bot Date: Tue, 21 Jan 2025 23:15:33 +0000 Subject: [PATCH] Artemis Changes --- README.md | 11 +---- app/src/main/java/control/Single.java | 36 +++++---------- .../main/java/datastructures/DsVector.java | 46 ++++++------------- app/src/main/java/generator/GenVector.java | 2 +- app/src/main/java/run/java/App.java | 28 +++++------ gradle/libs.versions.toml | 2 +- settings.gradle.kts | 4 +- 7 files changed, 46 insertions(+), 83 deletions(-) diff --git a/README.md b/README.md index be166ec..652da0f 100644 --- a/README.md +++ b/README.md @@ -5,22 +5,13 @@ This is a sample project for showcasing how optimization can be performed in a J Build: -```shell -./gradlew build -x test -``` Run Main: -```shell -./gradlew run -``` Run Unit Tests: -```shell -./gradlew test -``` Run Benchmarking: -(will be added later) +(will be added later) \ No newline at end of file diff --git a/app/src/main/java/control/Single.java b/app/src/main/java/control/Single.java index 8fefbb8..b65fa97 100644 --- a/app/src/main/java/control/Single.java +++ b/app/src/main/java/control/Single.java @@ -1,7 +1,5 @@ package control; -import java.util.Vector; - public class Single { /** * This method is used to calculate the sum of the first n natural numbers. @@ -11,15 +9,8 @@ public class Single { * @return The sum of the first n natural numbers. */ public static int sumRange(int n) { - int[] arr = new int[n]; - int sum = 0; - for (int i = 0; i < n; i++) { - arr[i] = i; - } - for (int i : arr) { - sum += i; - } - return sum; + // Direct calculation using the formula for the sum of the first n natural numbers + return (n * (n - 1)) / 2; } /** @@ -29,10 +20,13 @@ public static int sumRange(int n) { * @return The maximum value in the array. */ public static int maxArray(int[] arr) { - int max = 0; - for (int i : arr) { - if (i > max) { - max = i; + if (arr == null || arr.length == 0) { + return 0; // Handle empty or null array + } + int max = arr[0]; + for (int i = 1; i < arr.length; i++) { + if (arr[i] > max) { + max = arr[i]; } } return max; @@ -45,13 +39,7 @@ public static int maxArray(int[] arr) { * @param m The modulus. */ public static int sumModulus(int n, int m) { - Vector multiples = new Vector(); - for (int i = 0; i < n; i++) { - if (i % m == 0) { - multiples.add(i); - } - } - - return multiples.stream().mapToInt(Integer::valueOf).sum(); + int k = (n - 1) / m; // Calculate the number of multiples of m + return m * (k * (k + 1)) / 2; // Sum of multiples of m using the formula, more efficient } -} +} \ No newline at end of file diff --git a/app/src/main/java/datastructures/DsVector.java b/app/src/main/java/datastructures/DsVector.java index 75f17ed..d72f0be 100644 --- a/app/src/main/java/datastructures/DsVector.java +++ b/app/src/main/java/datastructures/DsVector.java @@ -1,4 +1,6 @@ package datastructures; +import java.util.ArrayList; +import java.util.Collections; import java.util.Vector; @@ -40,16 +42,10 @@ public static Vector searchVector(Vector v, int n) { */ public static Vector sortVector(Vector v) { Vector ret = new Vector(v); - - for (int i = 0; i < ret.size(); i++) { - for (int j = 0; j < ret.size() - 1; j++) { - if (ret.get(j) > ret.get(j + 1)) { - int temp = ret.get(j); - ret.set(j, ret.get(j + 1)); - ret.set(j + 1, temp); - } - } - } + ArrayList list = new ArrayList<>(ret); + Collections.sort(list); + ret.clear(); + ret.addAll(list); return ret; } @@ -60,11 +56,8 @@ public static Vector sortVector(Vector v) { * @return the reversed vector */ public static Vector reverseVector(Vector v) { - Vector ret = new Vector(); - - for (int i = v.size() - 1; i >= 0; i--) { - ret.add(v.get(i)); - } + Vector ret = new Vector(v); + Collections.reverse(ret); return ret; } @@ -76,14 +69,8 @@ public static Vector reverseVector(Vector v) { * @return the rotated vector */ public static Vector rotateVector(Vector v, int n) { - Vector ret = new Vector(); - - for (int i = n; i < v.size(); i++) { - ret.add(v.get(i)); - } - for (int i = 0; i < n; i++) { - ret.add(v.get(i)); - } + Vector ret = new Vector(v); + Collections.rotate(ret, -n); return ret; } @@ -96,14 +83,9 @@ public static Vector rotateVector(Vector v, int n) { */ public static Vector mergeVectors(Vector v1, Vector v2) { - Vector ret = new Vector(); - - for (int i = 0; i < v1.size(); i++) { - ret.add(v1.get(i)); - } - for (int i = 0; i < v2.size(); i++) { - ret.add(v2.get(i)); - } + Vector ret = new Vector(v1.size() + v2.size()); + ret.addAll(v1); + ret.addAll(v2); return ret; } -} +} \ No newline at end of file diff --git a/app/src/main/java/generator/GenVector.java b/app/src/main/java/generator/GenVector.java index cf180ff..4180912 100644 --- a/app/src/main/java/generator/GenVector.java +++ b/app/src/main/java/generator/GenVector.java @@ -24,4 +24,4 @@ public static Vector generateVector(int n, int m) { // Convert back to vector if the return type must be Vector. return new Vector<>(ret); } -} \ No newline at end of file +} diff --git a/app/src/main/java/run/java/App.java b/app/src/main/java/run/java/App.java index f67e52d..69ecb0a 100644 --- a/app/src/main/java/run/java/App.java +++ b/app/src/main/java/run/java/App.java @@ -1,4 +1,5 @@ package run.java; +import java.util.ArrayList; import algorithms.Primes; import algorithms.Sort; @@ -39,28 +40,29 @@ public static void double_() { } public static void vector() { - Vector inputVec = GenVector.generateVector(10, 10); - Vector inputVec2 = GenVector.generateVector(10, 10); + // Using ArrayList instead of Vector for better performance since synchronization is not needed + ArrayList inputVec = new ArrayList<>(GenVector.generateVector(10, 10)); + ArrayList inputVec2 = new ArrayList<>(GenVector.generateVector(10, 10)); System.out.println("Vector"); System.out.println("------"); System.out.println( String.format("ModifyVector(%s): %s", inputVec.toString(), - DsVector.modifyVector(inputVec).toString())); + DsVector.modifyVector(new Vector<>(inputVec)).toString())); System.out.println(String.format("SearchVector(%s, 5): %s", inputVec.toString(), - DsVector.searchVector(inputVec, 5))); + DsVector.searchVector(new Vector<>(inputVec), 5))); System.out.println(String.format("SortVector(%s): %s", inputVec.toString(), - DsVector.sortVector(inputVec).toString())); + DsVector.sortVector(new Vector<>(inputVec)).toString())); System.out.println( String.format("ReverseVector(%s): %s", inputVec.toString(), - DsVector.reverseVector(inputVec).toString())); + DsVector.reverseVector(new Vector<>(inputVec)).toString())); System.out.println( String.format("RotateVector(%s, 3): %s", inputVec.toString(), - DsVector.rotateVector(inputVec, 3).toString())); + DsVector.rotateVector(new Vector<>(inputVec), 3).toString())); System.out.println(String.format( "MergeVectors(%s, %s): %s", inputVec.toString(), inputVec2.toString(), - DsVector.mergeVectors(inputVec, inputVec2).toString())); + DsVector.mergeVectors(new Vector<>(inputVec), new Vector<>(inputVec2)).toString())); System.out.println(); } @@ -77,20 +79,20 @@ public static void primes() { } public static void sort() { - Vector initialVec = GenVector.generateVector(20, 10); + ArrayList initialVec = new ArrayList<>(GenVector.generateVector(20, 10)); System.out.println("Sort"); System.out.println("------"); - Vector inputVec0 = new Vector(initialVec); + Vector inputVec0 = new Vector<>(initialVec); Sort.SortVector(inputVec0); System.out.println(String.format( "SortVector(%s): %s", initialVec.toString(), inputVec0.toString())); - Vector inputVec1 = new Vector(initialVec); + Vector inputVec1 = new Vector<>(initialVec); Sort.DutchFlagPartition(inputVec1, 5); System.out.println(String.format("DutchFlagPartition(%s, 5): %s", inputVec1.toString(), inputVec1.toString())); System.out.println(String.format("MaxN(%s, 5): %s", initialVec.toString(), - Sort.MaxN(initialVec, 5).toString())); + Sort.MaxN(new Vector<>(initialVec), 5).toString())); System.out.println(); } @@ -101,4 +103,4 @@ public static void main(String[] args) { primes(); sort(); } -} +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f0021f5..4d6bb2a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,4 +7,4 @@ junit-jupiter = "5.10.0" [libraries] guava = { module = "com.google.guava:guava", version.ref = "guava" } -junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" } +junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 537182f..d71463c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,8 +7,8 @@ plugins { // Apply the foojay-resolver plugin to allow automatic download of JDKs - id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0" + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" } rootProject.name = "run-java" -include("app") +include("app") \ No newline at end of file