forked from Speiger/Primitive-Collections
More fixes.
- Fixed: containsKey & containsValue in HashMaps were deprecated for Object Variants. - Fixed: HashMap wasn't deleting Keys & Values references when removing a Object - Fixed: AVLTreeMap didn't balance properly. - Changed: EnumMap no longer tries to access SharedSecrets since its gone in java11 - Added: HashMaps now implement ITrimmable - Added: AVLTreeSet didn't balance properly - Fixed: HashMaps & LinkedMaps weren't clearing references properly.
This commit is contained in:
parent
c0fef15e64
commit
3b27604258
|
@ -4,8 +4,11 @@
|
||||||
### Version 0.3.1
|
### Version 0.3.1
|
||||||
- Fixed: containsKey & containsValue in HashMaps were deprecated for Object Variants.
|
- Fixed: containsKey & containsValue in HashMaps were deprecated for Object Variants.
|
||||||
- Fixed: HashMap wasn't deleting Keys & Values references when removing a Object
|
- Fixed: HashMap wasn't deleting Keys & Values references when removing a Object
|
||||||
- Fixed: AVLTreeSet didn't balance properly.
|
- Fixed: AVLTreeMap didn't balance properly.
|
||||||
- Changed: EnumMap no longer tries to access SharedSecrets since its gone in java11
|
- Changed: EnumMap no longer tries to access SharedSecrets since its gone in java11
|
||||||
|
- Added: HashMaps now implement ITrimmable
|
||||||
|
- Added: AVLTreeSet didn't balance properly
|
||||||
|
- Fixed: HashMaps & LinkedMaps weren't clearing references properly.
|
||||||
|
|
||||||
### Version 0.3.0 (Breaking 0.2.0)
|
### Version 0.3.0 (Breaking 0.2.0)
|
||||||
- Added: Stack.isEmpty was missing
|
- Added: Stack.isEmpty was missing
|
||||||
|
|
|
@ -481,7 +481,7 @@ public class LINKED_CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends CUSTOM_HASH_M
|
||||||
}
|
}
|
||||||
else if(lastIndex == pos) {
|
else if(lastIndex == pos) {
|
||||||
lastIndex = (int)(links[pos] >>> 32);
|
lastIndex = (int)(links[pos] >>> 32);
|
||||||
if(0 <= lastIndex) links[pos] |= 0xFFFFFFFFL;
|
if(0 <= lastIndex) links[lastIndex] |= 0xFFFFFFFFL;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
long link = links[pos];
|
long link = links[pos];
|
||||||
|
|
|
@ -566,6 +566,7 @@ public class CUSTOM_HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VAL
|
||||||
}
|
}
|
||||||
|
|
||||||
protected VALUE_TYPE removeIndex(int pos) {
|
protected VALUE_TYPE removeIndex(int pos) {
|
||||||
|
if(pos == nullIndex) return containsNull ? removeNullIndex() : getDefaultReturnValue();
|
||||||
VALUE_TYPE value = values[pos];
|
VALUE_TYPE value = values[pos];
|
||||||
keys[pos] = EMPTY_KEY_VALUE;
|
keys[pos] = EMPTY_KEY_VALUE;
|
||||||
values[pos] = EMPTY_VALUE;
|
values[pos] = EMPTY_VALUE;
|
||||||
|
|
|
@ -461,7 +461,7 @@ public class LINKED_HASH_MAP KEY_VALUE_GENERIC_TYPE extends HASH_MAP KEY_VALUE_G
|
||||||
}
|
}
|
||||||
else if(lastIndex == pos) {
|
else if(lastIndex == pos) {
|
||||||
lastIndex = (int)(links[pos] >>> 32);
|
lastIndex = (int)(links[pos] >>> 32);
|
||||||
if(0 <= lastIndex) links[pos] |= 0xFFFFFFFFL;
|
if(0 <= lastIndex) links[lastIndex] |= 0xFFFFFFFFL;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
long link = links[pos];
|
long link = links[pos];
|
||||||
|
|
|
@ -526,6 +526,7 @@ public class HASH_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_GENE
|
||||||
}
|
}
|
||||||
|
|
||||||
protected VALUE_TYPE removeIndex(int pos) {
|
protected VALUE_TYPE removeIndex(int pos) {
|
||||||
|
if(pos == nullIndex) return containsNull ? removeNullIndex() : getDefaultReturnValue();
|
||||||
VALUE_TYPE value = values[pos];
|
VALUE_TYPE value = values[pos];
|
||||||
keys[pos] = EMPTY_KEY_VALUE;
|
keys[pos] = EMPTY_KEY_VALUE;
|
||||||
values[pos] = EMPTY_VALUE;
|
values[pos] = EMPTY_VALUE;
|
||||||
|
|
|
@ -280,7 +280,7 @@ public class LINKED_ENUM_MAP KEY_ENUM_VALUE_GENERIC_TYPE extends ENUM_MAP KEY_VA
|
||||||
}
|
}
|
||||||
else if(lastIndex == pos) {
|
else if(lastIndex == pos) {
|
||||||
lastIndex = (int)(links[pos] >>> 32);
|
lastIndex = (int)(links[pos] >>> 32);
|
||||||
if(0 <= lastIndex) links[pos] |= 0xFFFFFFFFL;
|
if(0 <= lastIndex) links[lastIndex] |= 0xFFFFFFFFL;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
long link = links[pos];
|
long link = links[pos];
|
||||||
|
|
|
@ -801,6 +801,8 @@ public class AVL_TREE_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_
|
||||||
else entry.parent.right = right;
|
else entry.parent.right = right;
|
||||||
right.left = entry;
|
right.left = entry;
|
||||||
entry.parent = right;
|
entry.parent = right;
|
||||||
|
entry.updateHeight();
|
||||||
|
right.updateHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -815,6 +817,8 @@ public class AVL_TREE_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_
|
||||||
else entry.parent.left = left;
|
else entry.parent.left = left;
|
||||||
left.right = entry;
|
left.right = entry;
|
||||||
entry.parent = left;
|
entry.parent = left;
|
||||||
|
entry.updateHeight();
|
||||||
|
left.updateHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1933,7 +1937,7 @@ public class AVL_TREE_MAP KEY_VALUE_GENERIC_TYPE extends ABSTRACT_MAP KEY_VALUE_
|
||||||
|
|
||||||
void updateHeight() { state = (1 + Math.max(left == null ? -1 : left.getHeight(), right == null ? -1 : right.getHeight())); }
|
void updateHeight() { state = (1 + Math.max(left == null ? -1 : left.getHeight(), right == null ? -1 : right.getHeight())); }
|
||||||
|
|
||||||
int getBalance() { return (left == null ? -1 : left.getHeight()) - (right == null ? -1 : right.getBalance()); }
|
int getBalance() { return (left == null ? -1 : left.getHeight()) - (right == null ? -1 : right.getHeight()); }
|
||||||
|
|
||||||
boolean needsSuccessor() { return left != null && right != null; }
|
boolean needsSuccessor() { return left != null && right != null; }
|
||||||
|
|
||||||
|
|
|
@ -549,6 +549,8 @@ public class AVL_TREE_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE
|
||||||
else entry.parent.right = right;
|
else entry.parent.right = right;
|
||||||
right.left = entry;
|
right.left = entry;
|
||||||
entry.parent = right;
|
entry.parent = right;
|
||||||
|
entry.updateHeight();
|
||||||
|
right.updateHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -564,6 +566,8 @@ public class AVL_TREE_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE
|
||||||
else entry.parent.left = left;
|
else entry.parent.left = left;
|
||||||
left.right = entry;
|
left.right = entry;
|
||||||
entry.parent = left;
|
entry.parent = left;
|
||||||
|
entry.updateHeight();
|
||||||
|
left.updateHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1120,9 +1124,9 @@ public class AVL_TREE_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE
|
||||||
|
|
||||||
int getHeight() { return state; }
|
int getHeight() { return state; }
|
||||||
|
|
||||||
void updateHeight() { state = (1 + Math.max(left == null ? 0 : left.getHeight(), right == null ? 0 : right.getHeight())); }
|
void updateHeight() { state = (1 + Math.max(left == null ? -1 : left.getHeight(), right == null ? -1 : right.getHeight())); }
|
||||||
|
|
||||||
int getBalance() { return (left == null ? 0 : left.getHeight()) - (right == null ? 0 : right.getBalance()); }
|
int getBalance() { return (left == null ? -1 : left.getHeight()) - (right == null ? -1 : right.getHeight()); }
|
||||||
|
|
||||||
boolean needsSuccessor() { return left != null && right != null; }
|
boolean needsSuccessor() { return left != null && right != null; }
|
||||||
|
|
||||||
|
|
|
@ -424,7 +424,7 @@ public class LINKED_CUSTOM_HASH_SET KEY_GENERIC_TYPE extends CUSTOM_HASH_SET KEY
|
||||||
}
|
}
|
||||||
else if(lastIndex == pos) {
|
else if(lastIndex == pos) {
|
||||||
lastIndex = (int)(links[pos] >>> 32);
|
lastIndex = (int)(links[pos] >>> 32);
|
||||||
if(0 <= lastIndex) links[pos] |= 0xFFFFFFFFL;
|
if(0 <= lastIndex) links[lastIndex] |= 0xFFFFFFFFL;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
long link = links[pos];
|
long link = links[pos];
|
||||||
|
|
|
@ -396,7 +396,7 @@ public class LINKED_HASH_SET KEY_GENERIC_TYPE extends HASH_SET KEY_GENERIC_TYPE
|
||||||
}
|
}
|
||||||
else if(lastIndex == pos) {
|
else if(lastIndex == pos) {
|
||||||
lastIndex = (int)(links[pos] >>> 32);
|
lastIndex = (int)(links[pos] >>> 32);
|
||||||
if(0 <= lastIndex) links[pos] |= 0xFFFFFFFFL;
|
if(0 <= lastIndex) links[lastIndex] |= 0xFFFFFFFFL;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
long link = links[pos];
|
long link = links[pos];
|
||||||
|
|
|
@ -366,6 +366,8 @@ public class CUSTOM_HASH_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_T
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean removeIndex(int pos) {
|
protected boolean removeIndex(int pos) {
|
||||||
|
if(pos == nullIndex) return containsNull ? removeNullIndex() : false;
|
||||||
|
keys[pos] = EMPTY_KEY_VALUE;
|
||||||
size--;
|
size--;
|
||||||
onNodeRemoved(pos);
|
onNodeRemoved(pos);
|
||||||
shiftKeys(pos);
|
shiftKeys(pos);
|
||||||
|
|
|
@ -283,7 +283,7 @@ public class HASH_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE imp
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean remove(KEY_TYPE o) {
|
public boolean remove(KEY_TYPE o) {
|
||||||
if(KEY_EQUALS_NULL(o)) return (containsNull ? removeNullIndex() : false);
|
if(KEY_EQUALS_NULL(o)) return containsNull ? removeNullIndex() : false;
|
||||||
int pos = HashUtil.mix(KEY_TO_HASH(o)) & mask;
|
int pos = HashUtil.mix(KEY_TO_HASH(o)) & mask;
|
||||||
KEY_TYPE current = keys[pos];
|
KEY_TYPE current = keys[pos];
|
||||||
if(KEY_EQUALS_NULL(current)) return false;
|
if(KEY_EQUALS_NULL(current)) return false;
|
||||||
|
@ -324,6 +324,8 @@ public class HASH_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE imp
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean removeIndex(int pos) {
|
protected boolean removeIndex(int pos) {
|
||||||
|
if(pos == nullIndex) return containsNull ? removeNullIndex() : false;
|
||||||
|
keys[pos] = EMPTY_KEY_VALUE;
|
||||||
size--;
|
size--;
|
||||||
onNodeRemoved(pos);
|
onNodeRemoved(pos);
|
||||||
shiftKeys(pos);
|
shiftKeys(pos);
|
||||||
|
|
Loading…
Reference in New Issue