Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Commit 7676103

Browse files
committed
Лабораторная работа №27
1 parent 418cc4a commit 7676103

File tree

6 files changed

+197
-0
lines changed

6 files changed

+197
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<artifactId>23K0815</artifactId>
7+
<groupId>ru.mirea.practice</groupId>
8+
<version>2024.1</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>23K0815-p27</artifactId>
12+
<description>Массивы</description>
13+
</project>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package ru.mirea.practice.s0000001.task1;
2+
3+
public abstract class Application {
4+
public static void main(String[] args) {
5+
SimpleHashTable myHashTable = new SimpleHashTable(10);
6+
myHashTable.insert("item1", "data1");
7+
myHashTable.insert("item2", "data2");
8+
System.out.println(myHashTable.retrieve("item1"));
9+
myHashTable.remove("item1");
10+
System.out.println(myHashTable.retrieve("item1"));
11+
}
12+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package ru.mirea.practice.s0000001.task1;
2+
3+
import java.util.LinkedList;
4+
5+
class SimpleHashTable {
6+
private LinkedList<HashEntry>[] buckets;
7+
private int capacity;
8+
9+
private static class HashEntry {
10+
String identifier;
11+
String data;
12+
13+
HashEntry(String identifier, String data) {
14+
this.identifier = identifier;
15+
this.data = data;
16+
}
17+
}
18+
19+
public SimpleHashTable(int capacity) {
20+
this.capacity = capacity;
21+
buckets = new LinkedList[capacity];
22+
for (int i = 0; i < capacity; i++) {
23+
buckets[i] = new LinkedList<>();
24+
}
25+
}
26+
27+
private int computeHash(String identifier) {
28+
return Math.abs(identifier.hashCode()) % capacity;
29+
}
30+
31+
public void insert(String identifier, String data) {
32+
int index = computeHash(identifier);
33+
LinkedList<HashEntry> entries = buckets[index];
34+
35+
for (HashEntry entry : entries) {
36+
if (entry.identifier.equals(identifier)) {
37+
entry.data = data;
38+
return;
39+
}
40+
}
41+
entries.add(new HashEntry(identifier, data));
42+
}
43+
44+
public String retrieve(String identifier) {
45+
int index = computeHash(identifier);
46+
LinkedList<HashEntry> entries = buckets[index];
47+
48+
for (HashEntry entry : entries) {
49+
if (entry.identifier.equals(identifier)) {
50+
return entry.data;
51+
}
52+
}
53+
return null;
54+
}
55+
56+
public void remove(String identifier) {
57+
int index = computeHash(identifier);
58+
LinkedList<HashEntry> entries = buckets[index];
59+
60+
entries.removeIf(entry -> entry.identifier.equals(identifier));
61+
}
62+
63+
public void reset() {
64+
buckets = new LinkedList[capacity];
65+
for (int i = 0; i < capacity; i++) {
66+
buckets[i] = new LinkedList<>();
67+
}
68+
}
69+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package ru.mirea.practice.s0000001.task2;
2+
3+
public abstract class HashTableDemo {
4+
public static void main(String[] args) {
5+
MyHashTable myHashTable = new MyHashTable(10);
6+
7+
myHashTable.insert("item1", "data1");
8+
myHashTable.insert("item2", "data2");
9+
myHashTable.insert("item3", "data3");
10+
myHashTable.insert("item4", "data4");
11+
myHashTable.insert("item5", "data5");
12+
myHashTable.insert("item6", "data6");
13+
myHashTable.insert("item7", "data7");
14+
myHashTable.insert("item8", "data8");
15+
myHashTable.insert("item9", "data9");
16+
myHashTable.insert("item10", "data10");
17+
18+
System.out.println("Output:");
19+
for (int i = 1; i <= 10; i++) {
20+
String identifier = "item" + i;
21+
String data = myHashTable.retrieve(identifier);
22+
System.out.println(identifier + ": " + data);
23+
}
24+
25+
myHashTable.remove("item5");
26+
System.out.println("\nAfter removing item5:");
27+
for (int i = 1; i <= 10; i++) {
28+
String identifier = "item" + i;
29+
String data = myHashTable.retrieve(identifier);
30+
System.out.println(identifier + ": " + data);
31+
}
32+
}
33+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package ru.mirea.practice.s0000001.task2;
2+
3+
import java.util.LinkedList;
4+
5+
class MyHashTable {
6+
private LinkedList<HashEntry>[] buckets;
7+
private int capacity;
8+
9+
private static class HashEntry {
10+
String identifier;
11+
String data;
12+
13+
HashEntry(String identifier, String data) {
14+
this.identifier = identifier;
15+
this.data = data;
16+
}
17+
}
18+
19+
public MyHashTable(int capacity) {
20+
this.capacity = capacity;
21+
buckets = new LinkedList[capacity];
22+
for (int i = 0; i < capacity; i++) {
23+
buckets[i] = new LinkedList<>();
24+
}
25+
}
26+
27+
private int computeHash(String identifier) {
28+
return Math.abs(identifier.hashCode()) % capacity;
29+
}
30+
31+
public void insert(String identifier, String data) {
32+
int index = computeHash(identifier);
33+
LinkedList<HashEntry> entries = buckets[index];
34+
35+
for (HashEntry entry : entries) {
36+
if (entry.identifier.equals(identifier)) {
37+
entry.data = data;
38+
return;
39+
}
40+
}
41+
entries.add(new HashEntry(identifier, data));
42+
}
43+
44+
public String retrieve(String identifier) {
45+
int index = computeHash(identifier);
46+
LinkedList<HashEntry> entries = buckets[index];
47+
48+
for (HashEntry entry : entries) {
49+
if (entry.identifier.equals(identifier)) {
50+
return entry.data;
51+
}
52+
}
53+
return null;
54+
}
55+
56+
public void remove(String identifier) {
57+
int index = computeHash(identifier);
58+
LinkedList<HashEntry> entries = buckets[index];
59+
60+
entries.removeIf(entry -> entry.identifier.equals(identifier));
61+
}
62+
63+
public void reset() {
64+
buckets = new LinkedList[capacity];
65+
for (int i = 0; i < capacity; i++) {
66+
buckets[i] = new LinkedList<>();
67+
}
68+
}
69+
}

students/23K0815/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,6 @@
3434
<module>23K0815-p24</module>
3535
<module>23K0815-p25</module>
3636
<module>23K0815-p26</module>
37+
<module>23K0815-p27</module>
3738
</modules>
3839
</project>

0 commit comments

Comments
 (0)