diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..30cf57e
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..a590144
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..4158879
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..ad7d837
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/dev/Main.java b/src/main/java/dev/Main.java
index 19ca657..f0ec76a 100644
--- a/src/main/java/dev/Main.java
+++ b/src/main/java/dev/Main.java
@@ -1,22 +1,34 @@
package dev;
+
+import dev.model.Student;
import dev.service.StudentManager;
import dev.thread.StudentLoader;
import dev.utils.FileManager;
+
+import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
+
public class Main {
+
public static void main(String[] args) throws Exception {
+
Scanner scanner = new Scanner(System.in);
- StudentManager manager = new StudentManager();
+
+ StudentManager manager =
+ new StudentManager();
+
+
while (true) {
+
System.out.println("""
1.Load students
2.Search student
@@ -25,71 +37,180 @@ public class Main {
5.Exit
""");
+
+
int choice = scanner.nextInt();
+
+
switch (choice) {
+
+
case 1 -> {
- List data = FileManager.loadStudents("students.txt");
- // TODO:
+ List data =
+ FileManager.loadStudents("students.txt");
- // Split data into 3 parts
- List part1 = null;
- List part2 = null;
+ int size = data.size();
- List part3 = null;
- // TODO:
+ int part = (int)Math.ceil(size / 3.0);
- StudentLoader t1 = null;
- StudentLoader t2 = null;
- StudentLoader t3 = null;
+ List part1 =
+ data.subList(
+ 0,
+ Math.min(part,size)
+ );
- // TODO:
- // start()
+ List part2 =
+ data.subList(
+ Math.min(part,size),
+ Math.min(part*2,size)
+ );
- // join()
- // merge results
+ List part3 =
+ data.subList(
+ Math.min(part*2,size),
+ size
+ );
+
+
+
+ StudentLoader t1 =
+ new StudentLoader(part1);
+
+
+ StudentLoader t2 =
+ new StudentLoader(part2);
+
+
+ StudentLoader t3 =
+ new StudentLoader(part3);
+
+
+
+ t1.start();
+
+ t2.start();
+
+ t3.start();
+
+
+
+ t1.join();
+
+ t2.join();
+
+ t3.join();
+
+
+
+
+ ArrayList finalList =
+ new ArrayList<>();
+
+
+ finalList.addAll(t1.getStudents());
+
+ finalList.addAll(t2.getStudents());
+
+ finalList.addAll(t3.getStudents());
+
+
+
+ manager.addStudents(finalList);
+
+
+
+ System.out.println(
+ "Students loaded: "
+ + finalList.size()
+ );
+
}
+
+
case 2 -> {
+
System.out.print("ID: ");
+
int id = scanner.nextInt();
- System.out.println(manager.searchStudent(id));
+
+
+ Student student =
+ manager.searchStudent(id);
+
+
+
+ if(student != null){
+
+ System.out.println("Found:");
+
+ System.out.println(student);
+
+ }
+
+ else{
+
+ System.out.println("Student not found.");
+
+ }
+
}
+
+
case 3 -> {
+
System.out.print("ID: ");
+
int id = scanner.nextInt();
- boolean removed = manager.removeStudent(id);
- System.out.println(removed);
+ System.out.println(
+ manager.removeStudent(id)
+ );
+
}
- case 4 ->
- manager.printStudents();
+
+
+ case 4 -> {
+
+
+ manager.printStudents();
+
+
+ }
+
+
case 5 -> {
+
+
return;
+
+
}
+
}
}
diff --git a/src/main/java/dev/model/Student.java b/src/main/java/dev/model/Student.java
index f0484f4..f626ed4 100644
--- a/src/main/java/dev/model/Student.java
+++ b/src/main/java/dev/model/Student.java
@@ -3,18 +3,11 @@ package dev.model;
public class Student {
private final int id;
-
private final String name;
-
private final String major;
-
private final double gpa;
- public Student(
- int id,
- String name,
- String major,
- double gpa) {
+ public Student(int id, String name, String major, double gpa) {
this.id = id;
this.name = name;
@@ -38,35 +31,35 @@ public class Student {
return gpa;
}
+
@Override
public int hashCode() {
- // TODO:
- // Return custom hash
-
- // Example:
- // return id % 97;
-
- return 0;
+ return id % 97;
}
+
@Override
public boolean equals(Object obj) {
- // TODO:
+ if (obj == null) {
+ return false;
+ }
- // Step 1:
- // Check null
+ if (this == obj) {
+ return true;
+ }
- // Step 2:
- // Convert obj to Student
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
- // Step 3:
- // Compare IDs
+ Student other = (Student) obj;
- return false;
+ return id == other.id;
}
+
@Override
public String toString() {
@@ -77,5 +70,4 @@ public class Student {
", gpa=" + gpa +
'}';
}
-
}
\ No newline at end of file
diff --git a/src/main/java/dev/service/StudentManager.java b/src/main/java/dev/service/StudentManager.java
index 403a1c6..a629ca0 100644
--- a/src/main/java/dev/service/StudentManager.java
+++ b/src/main/java/dev/service/StudentManager.java
@@ -4,46 +4,58 @@ import dev.model.Student;
import java.util.ArrayList;
-
public class StudentManager {
+
private final ArrayList students = new ArrayList<>();
+
public void addStudents(ArrayList newStudents) {
- // TODO:
-
- // Merge students
-
- // Hint:
- // addAll()
+ students.addAll(newStudents);
}
+
public Student searchStudent(int id) {
- // TODO:
- // Loop through students
+ for (Student student : students) {
+
+
+ if (student.getId() == id) {
+
+ return student;
+ }
+
+ }
- // Compare IDs
return null;
}
+
public boolean removeStudent(int id) {
- // TODO:
- // Find student
+ Student student = searchStudent(id);
+
+
+ if (student != null) {
+
+ students.remove(student);
+
+ return true;
+ }
- // Remove student
return false;
}
+
public void printStudents() {
+
for (Student student : students) {
System.out.println(student);
diff --git a/src/main/java/dev/thread/StudentLoader.java b/src/main/java/dev/thread/StudentLoader.java
index ab47522..3ed21fd 100644
--- a/src/main/java/dev/thread/StudentLoader.java
+++ b/src/main/java/dev/thread/StudentLoader.java
@@ -1,56 +1,58 @@
package dev.thread;
-
import dev.model.Student;
import java.util.ArrayList;
import java.util.List;
+
public class StudentLoader extends Thread {
- // Assigned file lines
private final List lines;
- // Local student storage
private final ArrayList students = new ArrayList<>();
+
public StudentLoader(List lines) {
this.lines = lines;
}
+
@Override
public void run() {
- // TODO:
-
- /*
- Example line:
-
- 1001,Aryan,Computer Science,3.7
- */
for (String line : lines) {
- // TODO:
- // split line
- // TODO:
- // read values
+ String[] data = line.split(",");
- // TODO:
- // create Student
- // TODO:
- // add to students list
+ int id = Integer.parseInt(data[0]);
+
+ String name = data[1];
+
+ String major = data[2];
+
+ double gpa = Double.parseDouble(data[3]);
+
+
+ Student student =
+ new Student(id, name, major, gpa);
+
+
+ students.add(student);
}
+
}
+
public ArrayList getStudents() {
return students;
diff --git a/src/main/java/dev/utils/FileManager.java b/src/main/java/dev/utils/FileManager.java
index da7f6f5..6ac1891 100644
--- a/src/main/java/dev/utils/FileManager.java
+++ b/src/main/java/dev/utils/FileManager.java
@@ -1,31 +1,46 @@
package dev.utils;
+
import java.io.BufferedReader;
import java.io.FileReader;
-
import java.util.ArrayList;
import java.util.List;
+
public class FileManager {
- public static List loadStudents(String path) throws Exception {
+
+ public static List loadStudents(String path)
+ throws Exception {
+
List lines = new ArrayList<>();
- BufferedReader reader = new BufferedReader(new FileReader(path));
+
+ BufferedReader reader =
+ new BufferedReader(
+ new FileReader(path)
+ );
+
String line;
+
while ((line = reader.readLine()) != null) {
- // TODO:
- // Add line to list
+ if (!line.isEmpty()) {
+
+ lines.add(line);
+
+ }
}
+
reader.close();
+
return lines;
}
diff --git a/src/main/java/lecture/multithreading/basics/JoinSimpleExample.java b/src/main/java/lecture/multithreading/basics/JoinSimpleExample.java
index 4849634..7831664 100644
--- a/src/main/java/lecture/multithreading/basics/JoinSimpleExample.java
+++ b/src/main/java/lecture/multithreading/basics/JoinSimpleExample.java
@@ -25,7 +25,7 @@ public class JoinSimpleExample {
System.out.println("The main thread waits until the worker finishes...");
try {
- worker.join(); // The main thread stops here until the worker finishes
+ worker.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
diff --git a/src/main/java/lecture/multithreading/timeout/Main.java b/src/main/java/lecture/multithreading/timeout/Main.java
index 8258073..1d75d93 100644
--- a/src/main/java/lecture/multithreading/timeout/Main.java
+++ b/src/main/java/lecture/multithreading/timeout/Main.java
@@ -1,10 +1,36 @@
package lecture.multithreading.timeout;
-
-
public class Main {
- public static void main(String[] args) {
- // TODO
+ public static void main(String[] args) throws InterruptedException {
+
+ Thread worker = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ System.out.println("👷 Worker started...");
+ try {
+ Thread.sleep(10000); // Runs for 10 seconds
+ } catch (InterruptedException e) {
+ System.out.println("🛑 Worker was interrupted!");
+ }
+ System.out.println("👷 Worker finished!");
+ }
+ });
+
+ worker.start();
+
+ System.out.println("Main: waiting max 3 seconds for worker...");
+
+ // join with timeout (in milliseconds)
+ worker.join(3000);
+
+ if (worker.isAlive()) {
+ System.out.println("⏰ Timeout reached! Worker is still running.");
+ System.out.println("Main: I'm not waiting anymore, continuing...");
+ } else {
+ System.out.println("Worker finished before timeout.");
+ }
+
+ System.out.println("Main thread continues its own work now.");
}
}