Libraryless. Click here for Pure Java version (3867L/22K).
1 | // TreeSet variant allowing multiple elements which are considered |
2 | // equal by the comparator but not by eq(). |
3 | // All operations O(log n) with n being the number of _different_ elements. |
4 | sclass TreeSetWithDuplicates<A> extends AbstractSet<A> { |
5 | NavigableSet<Set<A>> internal; |
6 | Comparator<A> comparator; |
7 | int size; |
8 | |
9 | *() { internal = new TreeSet; } |
10 | *(Comparator<A> *comparator) { |
11 | internal = new TreeSet<Set<A>>((setA, setB) -> { |
12 | ret comparator.compare(main first(setA), main first(setB)); |
13 | }); |
14 | } |
15 | protected *(NavigableSet<Set<A>> *internal) {} |
16 | |
17 | // Now using CompactLinkedHashSet |
18 | swappable Set<A> makeInternalSet() { ret new CompactLinkedHashSet; } |
19 | |
20 | public bool add(A a) { |
21 | Set<A> newSet = addAndReturnCollection(makeInternalSet(), a); |
22 | Set<A> found = navigableSet_find(internal, newSet); |
23 | if (found != null) { |
24 | if (!found.add(a)) false; |
25 | } else |
26 | internal.add(newSet); |
27 | ++size; |
28 | true; |
29 | } |
30 | |
31 | public bool remove(O a) { |
32 | Set<A> newSet = addAndReturnCollection(makeInternalSet(), (A) a); |
33 | Set<A> found = navigableSet_find(internal, newSet); |
34 | if (found == null) false; |
35 | if (l(found) == 1) |
36 | internal.remove(found); |
37 | else |
38 | found.remove(a); |
39 | --size; |
40 | true; |
41 | } |
42 | |
43 | A first() { |
44 | ret main first(main first(internal)); |
45 | } |
46 | |
47 | A last() { |
48 | ret main last(main last(internal)); |
49 | } |
50 | |
51 | public ItIt<A> iterator() { |
52 | ret nestedIterator(internal, methodLambda0 iterator); |
53 | } |
54 | |
55 | public int size() { ret size; } |
56 | |
57 | // may return null |
58 | Set<A> tiedForFirst() { ret main first(internal); } |
59 | |
60 | public bool contains(O a) { |
61 | Set<A> newSet = addAndReturnCollection(makeInternalSet(), (A) a); |
62 | ret navigableSet_find(internal, newSet) != null; |
63 | } |
64 | } |
Began life as a copy of #1027809
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx
No comments. add comment
Snippet ID: | #1032058 |
Snippet name: | TreeSetWithDuplicates (backup) |
Eternal ID of this version: | #1032058/1 |
Text MD5: | 02a1d6d6280d8f46bd192e16a36e9119 |
Transpilation MD5: | 01cfada5d54f96c07ea8f29ac07f5e90 |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2021-08-11 08:26:34 |
Source code size: | 1804 bytes / 64 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 132 / 183 |
Referenced in: | [show references] |