-
Notifications
You must be signed in to change notification settings - Fork 19.4k
/
HeapElement.java
173 lines (157 loc) · 4.99 KB
/
HeapElement.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
package com.thealgorithms.datastructures.heaps;
/**
* Class representing an element in a heap.
*
* <p>
* A heap element contains two attributes: a key used for ordering in the heap
* (which can be of type int or double, either as primitive types or as wrapper objects)
* and an additional immutable object that can store any supplementary information the user desires.
* Note that using mutable objects may compromise the integrity of this information.
* </p>
*
* <p>
* The key attribute is used to determine the order of elements in the heap,
* while the additionalInfo attribute can carry user-defined data associated with the key.
* </p>
*
* <p>
* This class provides multiple constructors to accommodate various key types and includes
* methods to retrieve the key and additional information.
* </p>
*
* @author Nicolas Renard
*/
public class HeapElement {
private final double key;
private final Object additionalInfo;
// Constructors
/**
* Creates a HeapElement with the specified key and additional information.
*
* @param key the key of the element (primitive type double)
* @param info any immutable object containing additional information, may be null
*/
public HeapElement(double key, Object info) {
this.key = key;
this.additionalInfo = info;
}
/**
* Creates a HeapElement with the specified key and additional information.
*
* @param key the key of the element (primitive type int)
* @param info any immutable object containing additional information, may be null
*/
public HeapElement(int key, Object info) {
this.key = key;
this.additionalInfo = info;
}
/**
* Creates a HeapElement with the specified key and additional information.
*
* @param key the key of the element (object type Integer)
* @param info any immutable object containing additional information, may be null
*/
public HeapElement(Integer key, Object info) {
this.key = key;
this.additionalInfo = info;
}
/**
* Creates a HeapElement with the specified key and additional information.
*
* @param key the key of the element (object type Double)
* @param info any immutable object containing additional information, may be null
*/
public HeapElement(Double key, Object info) {
this.key = key;
this.additionalInfo = info;
}
/**
* Creates a HeapElement with the specified key.
*
* @param key the key of the element (primitive type double)
*/
public HeapElement(double key) {
this.key = key;
this.additionalInfo = null;
}
/**
* Creates a HeapElement with the specified key.
*
* @param key the key of the element (primitive type int)
*/
public HeapElement(int key) {
this.key = key;
this.additionalInfo = null;
}
/**
* Creates a HeapElement with the specified key.
*
* @param key the key of the element (object type Integer)
*/
public HeapElement(Integer key) {
this.key = key;
this.additionalInfo = null;
}
/**
* Creates a HeapElement with the specified key.
*
* @param key the key of the element (object type Double)
*/
public HeapElement(Double key) {
this.key = key;
this.additionalInfo = null;
}
// Getters
/**
* Returns the object containing the additional information provided by the user.
*
* @return the additional information
*/
public Object getInfo() {
return additionalInfo;
}
/**
* Returns the key value of the element.
*
* @return the key of the element
*/
public double getKey() {
return key;
}
// Overridden object methods
/**
* Returns a string representation of the heap element.
*
* @return a string describing the key and additional information
*/
@Override
public String toString() {
return "Key: " + key + " - " + (additionalInfo != null ? additionalInfo.toString() : "No additional info");
}
/**
* @param o : an object to compare with the current element
* @return true if the keys on both elements are identical and the
* additional info objects are identical.
*/
@Override
public boolean equals(Object o) {
if (o instanceof HeapElement otherHeapElement) {
return this.key == otherHeapElement.key && (this.additionalInfo != null ? this.additionalInfo.equals(otherHeapElement.additionalInfo) : otherHeapElement.additionalInfo == null);
}
return false;
}
/**
* Returns a hash code value for the heap element.
*
* @return a hash code value for this heap element
*/
@Override
public int hashCode() {
int result = 31 * (int) key;
result += (additionalInfo != null) ? additionalInfo.hashCode() : 0;
return result;
}
public String getValue() {
return additionalInfo.toString();
}
}