Files

257 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WS-07 Multithreading Basics and Hashing
---
## Mini Student Search Engine
### Goal
Create a simple student search engine that:
1. Reads students from a file
2. Processes data using multiple threads
3. Stores students inside lists
4. Supports search by ID
5. Overrides `hashCode()` and `equals()`
---
## Project Structure
```
WS-07-Multithreading-Basics-and-Hashing/
├── students.txt
├── src/main/java/dev/
│ │
│ ├── Main.java
│ │
│ ├── model/
│ │ └── Student.java
│ │
│ ├── thread/
│ │ └── StudentLoader.java
│ │
│ ├── service/
│ │ └── StudentManager.java
│ │
│ └── utils/
│ └── FileManager.java
└── README.md
```
---
## Input File
`students.txt`
```txt
1001,Ali,Computer Science,3.7
1002,Sara,Physics,3.9
1003,John,Mathematics,3.5
1004,Alice,Chemistry,3.2
1005,David,Computer Science,3.8
```
Format:
```txt
id,name,major,gpa
```
---
## Part 1 Student Class
Create:
```java
Student
```
Fields:
```java
int id;
String name;
String major;
double gpa;
```
Override:
```java
hashCode()
equals(Object obj)
toString()
```
Rules:
Students are equal if IDs are equal.
Example:
```java
Student s1 = new Student(1001,...);
Student s2 = new Student(1001,...);
s1.equals(s2); // true
```
Custom hash:
```java
return id % 97;
```
Do NOT use:
```java
Objects.hash()
```
---
## Part 2 Student Loader Thread
Create:
```java
StudentLoader extends Thread
```
Each thread receives part of file lines.
Example:
Thread 1:
```txt
1001
1002
```
Thread 2:
```txt
1003
1004
```
Thread 3:
```txt
1005
```
Each thread:
1. Reads assigned lines
2. Creates Student objects
3. Stores them in its own list
Example:
```java
Thread1 listA
Thread2 listB
Thread3 listC
```
No shared list.
Do NOT use:
```java
synchronized
Lock
Semaphore
ExecutorService
```
---
# Part 3 Merge Results
After threads finish:
```java
thread1.join();
thread2.join();
thread3.join();
```
Combine results:
```java
finalList.addAll(listA);
finalList.addAll(listB);
finalList.addAll(listC);
```
---
## Required Menu
```txt
1.Load students
2.Search student
3.Remove student
4.Print students
5.Exit
```
Search example:
```txt
ID:1002
Found:
Student{id=1002,name=Sara}
```
---
## Restrictions
Forbidden:
```java
HashMap
HashSet
TreeMap
ConcurrentHashMap
synchronized
wait()
notify()
Lock
Semaphore
ExecutorService
```
Allowed:
```java
Thread
join()
ArrayList
FileReader
BufferedReader
```