ç§ã®å人ã¯ãããã°ã©ããŒã次ã®2ã€ã®çç±ã§è¡ããšèšããŸãïŒãããã圌ã®èšèãªã®ããã©ããã«æã£ãŠããã®ãããããŸããïŒãããã«ãŒã«ãªãããã®ããã²ãŒã ãæžãããã®ãã 2çªç®ã®ã±ãŒã¹ã ç§ã¯åžžã«ã²ãŒã ã®éçºãšãã²ãŒã ã®äººå·¥ç¥èœãæ
åœããéšåã«èå³ããããŸããã ç§ã¯ãã¹æ€çŽ¢ã¢ã«ãŽãªãºã ã®ç 究ã«å€ãã®æéãè²»ãããŸããã Javaã§
A *ã¢ã«ãŽãªãºã ã®æ¬¡ã®ããŒãžã§ã³ãå®è£
ãããšãTreeSetããã³TreeMapã³ã¬ã¯ã·ã§ã³ã«é¢é£ããèå³æ·±ãç¶æ³ã«ééããŸããã
ãã®èšäºå
šäœã§äœ¿çšãã2ã€ã®æŠå¿µãã€ãŸã
ãå¹³çã®
æ€çŽ¢ãšæ¯èŒã®
æ€çŽ¢ãããã«çŽ¹ä»ããããšæããŸãã
ç䟡æ€çŽ¢ãšã¯ã
equals ã¡ãœãããš
hashCodeã¡ãœããã䜿çšããŠèŠçŽ ãæ¯èŒããã³ã¬ã¯ã·ã§ã³å
ã®æ€çŽ¢ã
æããŸãã
æ¯èŒã«ããæ€çŽ¢ããŸãã¯æ¯èŒã«åºã¥ãæ€çŽ¢ãã³ã¬ã¯ã·ã§ã³å
ã®èŠçŽ ã®æ€çŽ¢ãåŒã³åºããŸããããã§ã¯ãã¡ãœãã
compareããã³
compareToã䜿çšããŠèŠçŽ ãæ¯èŒããŸãã
A *ã¢ã«ãŽãªãºã ã¯2ã€ã®ã³ã¬ã¯ã·ã§ã³ã䜿çšããŠ
ããŠã§ã€ãã€ã³ããä¿åããŸãïŒ
ãªãŒãã³ãªã¹ããš
ã¯ããŒãºãªã¹ã ã 倧ãŸãã«èšã£ãŠããŠã§ã€ãã€ã³ãã«ã¯3ã€ã®éèŠãªå±æ§ããããŸãïŒX座æšãY座æšãããã³ã¡ããªãã¯é¢æ°ã®å€-Fãéãããªã¹ãã®å Žåãè¿œå ãšæ€çŽ¢ã®2ã€ã®æäœã®ã¿ãå®è¡ããå¿
èŠããããŸãã ãªã¹ããéããšãäºæ
ã¯ããå°ãè€éã«ãªããŸãã éãããªã¹ãã§ã¯ãèŠçŽ ã®è¿œå ãšæ€çŽ¢ã®æäœã«å ããŠãã¡ããªãã¯é¢æ°ã®å€ã«ãã£ãŠæå°ã®ãã€ã³ããèŠã€ããå¿
èŠããããŸãã
éãããªã¹ãã®å Žåã¯ã
HashSetãéžæããŸã
ãããã§ã¯ãã¹ãŠãæããã§ããè¿œå ããã³æ€çŽ¢æäœã®å Žåã¯ãé©åãªããã·ã¥é¢æ°ãäœæããŠãããšäŸ¿å©ã§ãã ãªãŒãã³ãªã¹ãã®ã³ã¬ã¯ã·ã§ã³ãéžæããã®ã¯å°é£ã§ãã éãããªã¹ãã®ããã«
HashSetãéžæãããšãæ¿å
¥ãæ€çŽ¢ãåé€ã®æäœã«å¯ŸããŠæé©ãªæŒžè¿çãªåäœãåŸãããŸã-OïŒ1ïŒããã ããæå°ã®æ€çŽ¢ã¯OïŒnïŒã§å®è¡ãããŸãã
TreeSetãŸãã¯
TreeMapãéžæãããšãæ¿å
¥ãšæ€çŽ¢ã«OïŒlogïŒnïŒïŒã䜿çšãããŸãããæå°å€ã®æ€çŽ¢ãšåé€ã«ã¯ãã¹ãŠåãOïŒlogïŒnïŒïŒã䜿çšãããŸãã
ããã§ããŸããŸãªã³ã¬ã¯ã·ã§ã³ã®æŒžè¿ãåç
§ããŠãã ããã
TreeMapãš
TreeSetã«é¢é£ãããã1ã€ã®éèŠãªè©³çŽ°ã¯ããããã®ã³ã¬ã¯ã·ã§ã³ã§ã®ãã¹ãŠã®æäœãæ¯èŒã䜿çšããããšã§ãã ãããã£ãŠããã€ã³ãã®åº§æšãèæ
®ããŠæ€çŽ¢ã«é¢å¿ãããå Žåãæå°å€ãèŠã€ããããã«ã¡ããªãã¯é¢æ°ã®å€ã䜿çšããŸããããã«ããããã®å€ãå€æŽããããã€ã³ãã«å¯ŸããŠæäœãå®è¡ãããªãå¯èœæ§ããããšããäºå®ã«ã€ãªãããŸãã ããã«ãæ°ããå€ãæ¿å
¥ãããšã誀ã£ãŠæ§ç¯ãããããªãŒãååŸã§ããŸããåã座æšãæã€ãã€ã³ããæ¯èŒãããããã³ã³ãã¬ãŒã¿ã§èæ
®ãããšãããªãŒã«æ°ããå€ãæ¿å
¥ããããšã¯ã§ããŸããã
æ€çŽ¢ã¢ã«ãŽãªãºã ã®åå埩ã§ã¡ããªãã¯é¢æ°ã®å€ã«ããæå°èŠçŽ ã®æ€çŽ¢ãå®è¡ãããäžæ¹ã§ãèŠçŽ ã¯ãªãŒãã³ãªã¹ãã«ããã»ã©é »ç¹ã«è¿œå ãããªãããããã€ããªããªãŒã«åºã¥ãã³ã¬ã¯ã·ã§ã³ã䜿çšããããšã¯çã«ããªã£ãŠããŸãã ããã¯ããªãŒãã³ãªã¹ããžã®è¿œå ãã¯ããŒãºããªã¹ãå
ã®åæ§ã®ïŒåº§æšå
ã®ïŒèŠçŽ ã®ååšã«äŸåãããšããäºå®ã«ãããã®ã§ãããã®èŠçŽ ã¯æéãšãšãã«æé·ãããã®äžã«ãã€ã³ããå¢ããŸããªã¹ãã ãããã
HashSetã³ã¬ã¯ã·ã§ã³ã®å©ç¹ãæã¡ããã§ãã
ã¿ã¹ã¯ãäžè¬åããããšã«ããŸããã äžé£ã®ãã£ãŒã«ããããããŒã¿æ§é ãå®çŸ©ããŸãã ãŸããç¹å®ã®æ§é ã®2ã€ã®èŠçŽ ã®ç䟡é¢ä¿ã決å®ãããã£ãŒã«ããããã°ãé åºé¢ä¿ã決å®ãããã£ãŒã«ãããããŸãïŒèšãæãããšãequalsã¡ãœãããšhashCodeã¡ãœããã¯ãªããžã§ã¯ãã®åããã£ãŒã«ãã䜿çšããcompareã¡ãœãããšcompareToã¡ãœããã¯ä»æ¹ã䜿çšããŸãïŒã
ç®çïŒ OïŒ1ïŒã®æŒžè¿çãªæ¯ãèãã§çåŒã«åºã¥ããŠèŠçŽ ãæ€çŽ¢ããæäœãå®è¡ãããããŒã¿æ§é ãå®è£
ããæäœãšæ¯èŒãšçåŒãèæ
®ããŠæ¿å
¥ãšåé€ã®æäœãå®è¡ããæå°èŠçŽ ãæšã®æ ¹ã«ãªãããã«äºåæšãæ§ç¯ãããç§ã®ç®çã®ããã«ã座æšãèæ
®ããŠãã€ã³ãããªãŒãã³ãªã¹ãã«ä¿åããå¿
èŠããããããè¡çªãçºçããªãããã«ãééæ§ãããã®ãµã€ãºã«åºã¥ããŠããã·ã¥é¢æ°ãäžæã«æ±ºå®ã§ãããããã³ã¬ã¯ã·ã§ã³å
ã®èŠçŽ ã®æ倧æ°ãå®æ°ãšããŠèšå®ããããšã«ããŸããã

èãæ¹ã¯éåžžã«ç°¡åã§ããã³ã¬ã¯ã·ã§ã³ã®èŠçŽ ãããã·ã¥ã«åºã¥ããŠé
åã«å
¥ããããã«åãèŠçŽ ããã€ããªããªãŒã«å
¥ããŸãã èŠçŽ ãããªãŒããŒãã«ããã¯ããã«ã¯ãå
éšã¯ã©ã¹ãå¿
èŠã§ãã
private static class Node<V extends Comparable<V>> { private Node parent; private Node left; private Node right; private int k = 0; private final V data; public Node(V data) { this.data = data; this.parent = null; this.left = null; this.right = null; } }
ã¿ã€ãVã¯ã³ã¬ã¯ã·ã§ã³ã®èŠçŽ ãå®çŸ©ããComparableã¯ã©ã¹ãæ¡åŒµããŠãããªãŒãæ§ç¯ããããã«æ¯èŒã§ããããã«ããå¿
èŠããããŸãã
ã¯ã©ã¹ã«ã¯ãå·Šå³ã®åå«ãžã®ãã€ã³ã¿ã«å ããŠãå
ç¥ãžã®ãã€ã³ã¿ããããŸãã ããã¯ãããªãŒããèŠçŽ ãåé€ããããã»ã¹ãæé©åããããã«è¡ãããŸã-åé€ãããèŠçŽ ã®åé§äœã¯ãã«ãŒãããããªãŒããã€ãã¹ããŠåé€ã¢ã«ãŽãªãºã ããé€å€ã§ããèŠçŽ ã®é
åã䜿çšããŠæ€çŽ¢ã§ããŸãã ååã
kã®ãã£ãŒã«ãã«ã¯ããµãããªãŒããŒããå·Šã®åã§é£ç¶ããŠå¢å ããããŒãã§ãªãå Žåããã®æ°ãå«ãŸããŸãã

ã³ã¬ã¯ã·ã§ã³å
ã«ã¯ãããªãŒã®ã«ãŒããžã®ãã€ã³ã¿ãšã³ã¬ã¯ã·ã§ã³ã®èŠçŽ ã®é
åãããã空ã®ã»ã«ãšãè¿œå ãããèŠçŽ ã®å€ïŒãŸãã¯ãªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ãžã®ãã€ã³ã¿ã®å€ïŒã
ããŒã¿ãã£ãŒã«ãã«æ ŒçŽããã
Nodeã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«æ ŒçŽãããŸãã
public abstract class HashTree<E extends Comparable<E>> { private Node root = null; private Node[] nodes; public HashTree(int capacity) { this.nodes = new Node[capacity]; } public abstract int getElementHash(E element); ⊠}
ã¿ã€ãVãšåæ§ã«ã
ã¿ã€ãEã¯ã³ã¬ã¯ã·ã§ã³ã¢ã€ãã ãå®çŸ©ããŸãã ããã©ã«ãã§ã¯ãã³ã¬ã¯ã·ã§ã³ã¯ç©ºãªã®ã§ãã«ãŒãèŠçŽ ãžã®ãã€ã³ã¿ãŒã¯nullã§ãããé
åã
nullå€ã§åããã
ãŸã ã ããã·ã¥ã³ãŒãã®èšç®ããªãŒããŒã©ã€ãã§ããæœè±¡
getElementHashã¡ãœãããæã€æœè±¡ã¯ã©ã¹ã
次ã«ã¡ãœããã«ç§»ããŸãã
AddElementã¡ãœããïŒ
public void addElement(E element) { int index = getElementHash(element); if (nodes[index] != null) { return; } Node<E> node = new Node<>(element); nodes[index] = node; this.root = connectNodes(this.root, node); }
ãã®ã¡ãœããã§ã¯ãè¿œå ããèŠçŽ ã®ããã·ã¥ã³ãŒããååŸããŸãã ããŒã¿ãšããŠæ°ããèŠçŽ ãæã€æ°ããããªãŒããŒããäœæãããããããªãŒãšé
åã«è¿œå ããŸããããã·ã¥ã³ãŒãã¯é
åã®ã€ã³ããã¯ã¹ãå®çŸ©ããŸãã é
åãžã®èŠçŽ ã®æ¿å
¥ã«ã¯æŒžè¿ç·OïŒ1ïŒããããããªãŒãžã®æ¿å
¥ã«ã¯OïŒå¯Ÿæ°ïŒnïŒïŒããããå
šæŒžè¿ç·ã¯OïŒå¯Ÿæ°ïŒnïŒïŒã§ãã
RemoveElementã¡ãœããïŒ
public E removeElement(E element) { int index = getElementHash(element); Node node = nodes[index]; if (node == null) { return null; } nodes[index] = null; E data = (E) node.data; Node l = getElemInArray(node.left); Node r = getElemInArray(node.right); if (l != null) { l.parent = null; } if (r != null) { r.parent = null; } l = connectNodes(l, r); if (node.parent == null) { this.root = l; if (this.root != null) { this.root.parent = null; } return data; } int p = getElementHash((E) node.parent.data); if (nodes[p] != null) {
ããã§ã¯ãåé€ããèŠçŽ ã®ããã·ã¥ã³ãŒãã䜿çšããŠãåé€ããããªãŒã®ããŒããé
åããæœåºããŸãã åé€ããããŒãã®ç¥å
ã䜿çšããŠãèŠçŽ ãåé€ããŸãããã®éããµãããªãŒã2ååŒã³åºãå¿
èŠããããææªã®å Žåã®åæäœã¯æŒžè¿çãªåäœ-OïŒlogïŒnïŒïŒãæã¡ãŸãã çµæãšããŠãã¡ãœããã«ã¯æŒžè¿ç·OïŒlogïŒnïŒïŒããããŸãã
connectNodesã¡ãœããã¯ãåäžã®ããŒããšãµãããªãŒã®äž¡æ¹ãçµåããŸãã ããã«ããã€ã³ãã£ã³ã°ã¯æ¯èŒã䜿çšããŠè¡ãããŸãã ãããã£ãŠãæå°ã®èŠçŽ ã¯åžžã«ããªãŒã®æäžéšã«ãããŸãã
ConnectNodesã¡ãœããïŒ
private Node connectNodes(Node parent, Node node) { if (node == null) { return parent; } if (parent == null) { return node; } else { if (compare(node, parent) < 0) { return connectNodes(node, parent); } Node cur = parent; Node n = node; while (cur != null) { if (cur.left == null) { cur.left = n; n.parent = cur; cur.k++; break; } if (cur.right == null) { if (compare(n, cur.left) <= 0) { cur.right = cur.left; cur.left = n; n.parent = cur; cur.k++; break; } else { cur.right = n; n.parent = cur; cur.k++; break; } } if (compare(n, cur.left) <= 0) { Node tmp = cur.left; cur.left = n; n.parent = cur; cur.k++; cur = n; n = tmp; continue; } if (compare(n, cur.right) < 0 && compare(n, cur.left) > 0) { cur.k++; if (cur.right.k < cur.left.k) { Node tmp = cur.right; cur.right = n; n.parent = cur; cur = n; n = tmp; } else { cur = cur.left; } continue; } if (compare(n, cur.left) > 0) { cur.k++; cur = cur.left.k < cur.right.k ? cur.left : cur.right; } } return parent; }
connectNodesã¡ãœããã«ã¯ç¹å¥ãªæ³šæãæãå¿
èŠããããŸãã æ°ããèŠçŽ ã®è¿œå ã¯ãã«ãŒãããã³æ°ããèŠçŽ ã«é¢é£ããŠãã®ã¡ââãœããã䜿çšããŠå®è¡ãããŸãã ããªãŒã¯ç©ºã§ã¯ãªããšèããŸãã

4ã€ã®ã±ãŒã¹ãèããããŸãã
- æ°ããèŠçŽ ã¯ã«ãŒããããå°ããã
- æ°ããã¢ã€ãã ã¯å·Šã®åãããå°ããã§ãã
- æ°ããèŠçŽ ã¯å·Šã®åå«ããã倧ããããå³ã®åãããå°ããã
- æ°ããã¢ã€ãã ã¯å³ã®åããã倧ãããªããŸãã
äºäŸ1ãã®ç¶æ³ã§ã¯ã芪ãæ°ããèŠçŽ ã®å·Šã®åã«ãªãã芪ãããªãŒã®ã«ãŒãã§ããå Žåãæ°ããè¿œå ãããèŠçŽ ã¯ããããæ°ããã«ãŒãã«ãªããŸãã
äºäŸ2次ã®2ã€ã®ãªãã·ã§ã³ããããŸããå³ã®åãå®çŸ©ãããå³ã®åãå®çŸ©ãããŠããŸããã å·Šã®åå«ãå®çŸ©ãããŠããªãå Žåãå·Šã®åå«ã¯æ°ããããŒãã«ãšã£ãŠããéèŠã§ãããšèŠãªãããŸãã ã©ã¡ãã®å Žåããæ°ããèŠçŽ ã¯èŠªã®å·Šã®åã«ãªããå·ŠïŒè¿œå ããåã¯å·Šã®åã§ããââïŒãå³ã®åã«ãªããŸãã ãã ãã2çªç®ã®ã±ãŒã¹ã§ã¯ãå€ãå³ã®åå«ã®å³ãæ°ããå³ã®åå«ã®å·Šã«çµåããå¿
èŠããããŸãã å·Šããå³ãžã®çµåã¯ã説æããå ŽåãšåãèŠåã«åŸã£ãŠè¡ãããŸãã
äºäŸ3ãã®å Žåãå³åŽã®ãµãããªãŒãããããŒããå°ãªãå Žåãå·ŠåŽã®ãµãããªãŒã移åããŠæ°ããããŒããè¿œå ããããå³åŽã®ãµãããªãŒã®å³åŽãæ¿å
¥ããããŒãããŒãã«çœ®ãæããŠå³åŽã®ãµãããªãŒã®å³åŽãè¿œå ããŸãã
äºäŸ4ãã®å ŽåãããŒããå°ãªããµãããªãŒã«æ²¿ã£ãŠé·ç§»ãå®è¡ãããŸãã ããŒãã®æ°ã¯ããã£ãŒã«ãkã«èç©ãããŸãã

次ã«ã
connectNodesã¡ãœããã®æŒžè¿çãªåäœãæšå®ã
ãŸã ã æè¯ã®å Žåãåå«ã®ãªãããŒããéé ã§ããªãŒã«è¿œå ããããšã挞è¿ç·ã¯OïŒ1ïŒã«ãªããŸãããã®å Žåãæ°ããèŠçŽ ãç¥ç¶æ¯ã®ä»£ããã«é
眮ããããã§ãã ããŒããåå«ã«é¢é£ä»ããå
ç¥ãããå°ããããããšã«ã€ããŠè©±ããŠããå Žåã¯ãããŒãã®ãµãããªãŒã調ã¹ãå¿
èŠããããŸãã ã±ãŒã¹2ã®å Žåããã©ã°ã©ã
aïŒã§ã¯æŒžè¿çåäœã¯OïŒ1ïŒã§ããããã©ã°ã©ã
bïŒã§ã¯ãæ¿å
¥ãããããŒãã®ãµãããªãŒãå床ééããå¿
èŠããããŸãã
ããŒãã®ãã£ãŒã«ã
kã¯ã1çªç®ä»¥å€ã®ãã¹ãŠã®å Žåã«å¢å ããããšã«æ³šæããŠãã ãããããã¯ãããªãŒã察称çã«æºããããããã«è¡ãããŸãããå·ŠãµãããªãŒã®æé ã«éåããããšã¯ãããŸããã
ããªãŒãéãéè·¯ã®è€éããè©äŸ¡ããã«ã¯ããã®é«ããè©äŸ¡ããã ãã§ååã§ãã ããªãŒã®é«ãã¯ãç®çã®æŒžè¿çãªåäœã«ãªããŸãã å¥ã®åé¡ã¯ãå·ŠåŽã®ãµãããªãŒäžã®ã·ãŒã±ã³ã¹ã®é·ãã®ååšã§ãã ãã®ãããªãµãããªãŒã®ååšãèæ
®ãããšãææªã®å Žåããã€ã³ãã£ã³ã°ã®æŒžè¿çæåã¯ããã€ã³ãããããµãããªãŒãšã®ãã€ã³ãã£ã³ã°ã®æŒžè¿çæåãšèããããšãã§ããæè¯ã®å Žåã¯OïŒ1ïŒïŒ2ã®å ŽåïŒãšãªããŸãã

ããŒããæ¥ç¶ãããšããããªãŒå
ã®ããŒããæ±ãããããµãããªãŒã®é«ãã¯ããªãŒèªäœã®é«ããè¶
ããªããšèŠãªãããšãã§ããŸãã ãããã£ãŠããã€ããªããªãŒå
šäœã®é«ããæšå®ããããconnectNodesã¡ãœããã®æŒžè¿çãªåäœãååŸããŸãã æ¿å
¥ãããµãããªãŒã®éžæã¯ãããŒãã®ãã£ãŒã«ã
k ïŒé£ç¶çã«å¢å ããããŒããé€ããŠãµãããªãŒã®ãµã€ãºãæ ŒçŽãã1ã€ã®ããŒããšããŠã«ãŠã³ããããŸãïŒã«åºã¥ããŠéžæããããšããäºå®ã«ãããããªãŒã¯åã®ããŒããåããåŸã«ã®ã¿æ¬¡ã®ã¬ãã«ãåããåŸåããããŸãïŒãã¡ããäŸå€ã§ãïŒäžèšã®å Žå1ïŒã ãããã£ãŠãããªãŒã¯æ¬¡ã®ããã«ãªããŸãã

ãããã£ãŠãnãããªãŒå
ã®ããŒãã®æ°ã§ããå Žåã
ã ãããããæšã®é«ã
ã ãããã£ãŠã
connectNodesã¡ãœããã®æŒžè¿çãªåäœã¯OïŒlogïŒnïŒïŒã§ãã
èŠçŽ ã¯ããªãŒã§ã¯ãªããããã·ã¥ã³ãŒãã«åºã¥ããé
åã§æ€çŽ¢ã§ãããããæ€çŽ¢æäœã«ã¯æŒžè¿OïŒ1ïŒãå«ãŸããŸãã ãŸããããªãŒã¯ãã€ããªãšããŠç·šæãããŠãããããã«ãŒãã«ã¯åžžã«æå°èŠçŽ ãå«ãŸããŠãããæå°å€ã®æ€çŽ¢ã®æŒžè¿çåäœã¯OïŒ1ïŒã§ãã æå°èŠçŽ ã®åé€ã«ã¯æŒžè¿ç·OïŒlogïŒnïŒïŒãããããšã«æ³šæããŠãã ãããããã¯ã
connectNodesã¡ãœããã䜿çšããŠã«ãŒãããéå§ããŠããªãŒãåç·šæããå¿
èŠãããããã§ãã
äžèŠãå®è£
ãããã³ã¬ã¯ã·ã§ã³å
ã®æå°èŠçŽ ãåé€ããæäœã¯ã
HashSetã³ã¬ã¯ã·ã§ã³ããã挞è¿æ§ãæªããªããŸãããæå°èŠçŽ ãåé€ããåã«æåã«èŠã€ããå¿
èŠãããããšãå¿ããªãã§ãã ããããã®ããã«ã¯ã挞è¿ç·OïŒnïŒã§æäœãå®è¡ããå¿
èŠããããŸãã ãããã£ãŠãHashSetã³ã¬ã¯ã·ã§ã³ã®æå°èŠçŽ ãåé€ããæäœã®æçµçãªæŒžè¿çãªåäœã¯ã-OïŒnïŒãšãã圢åŒã«ãªããŸãã
åè¿°ã®ããã«ãã³ã¬ã¯ã·ã§ã³å
ã®èŠçŽ ã®ååšã®ç¢ºèªã¯ãèŠçŽ ã®ããã·ã¥ã³ãŒãã«ãã£ãŠæ±ºå®ãããã€ã³ããã¯ã¹ã«ããé
å
ã®èŠçŽ ã®
nullã®ç¢ºèªã«åºã¥ããŠå®è¡ãã
ãŸã ã æ€èšŒã¯ã
containsã¡ãœããã«ãã£ãŠå®è¡ãããOïŒ1ïŒã®æŒžè¿çãªåäœãããŸãã
public boolean contains(E element) { int index = getElementHash(element); return nodes[index] != null; }
ãŸããããã·ã¥ã³ãŒãã«åºã¥ããŠã
getElementã¡ãœããã䜿çšããŠãåã挞è¿ç·ã§åãã
ã©ãããåæã«æ€çŽ¢ãããŸãã
public E getElement(E element) { return (E) nodes[getElementHash(element)].data; }
å®è£
ãããã³ã¬ã¯ã·ã§ã³ã«ã¯æ¬ é¥ããªãããã§ã¯ãããŸããã ããå€ãã®ã¡ã¢ãªãå¿
èŠã§ãããè¡çªã®ãªãããã·ã¥é¢æ°ãå¿
èŠã§ãããŸããèŠçŽ ã®åæãå®è£
ããã«ã¯ããªãŒãã©ããŒãµã«ãå®è£
ããå¿
èŠããããŸãããããã楜ãã¿ã§ã¯ãããŸãããããã®ã³ã¬ã¯ã·ã§ã³ã¯ä»ã®ç®çã察象ãšããŠããŸãã äž»ãªå©ç¹ã¯ãæé©ãªæŒžè¿æ§ã䜿çšããŠãç°ãªãåºæºã«åŸã£ãŠåãã¿ã€ãã®èŠçŽ ãæ€çŽ¢ã§ããããšã§ãã ç§ã®ã¿ã¹ã¯ã«é©çšãããããã«ãããã¯åº§æšã«åºã¥ããå¹³çã®æ€çŽ¢ãšãã¡ããªãã¯é¢æ°ã®å€ã®æ¯èŒã«åºã¥ããæå°èŠçŽ ã®æ€çŽ¢ã§ããã
æåŸã«ã
LinkedHashMap ã
TreeSetãããã³
HashSetã³ã¬ã¯ã·ã§ã³ãšæ¯èŒããããã©ãŒãã³ã¹ã®ã³ã¬ã¯ã·ã§ã³ã®ãã¹ãçµæã瀺ããŸãã ãã¹ãŠã®ã³ã¬ã¯ã·ã§ã³ã«ã¯ã
æŽæ°åã®1000åã®å€ãå
¥åãããå
¥åãããã³ã¬ã¯ã·ã§ã³ã§ã¯ã次ã®äžé£ã®æäœãå®è¡ãããŸããã
- ã³ã¬ã¯ã·ã§ã³ã«æ°ããã¢ã€ãã ãé
眮ããŸãã
- ã³ã¬ã¯ã·ã§ã³å
ã®ç¹å®ã®å€ãæã€èŠçŽ ã®ååšã確èªããŸãïŒãã§ãã¯ã¯ãã³ã¬ã¯ã·ã§ã³å
ã«ããèŠçŽ ãšã³ã¬ã¯ã·ã§ã³å
ã«ãªãèŠçŽ ã«å¯ŸããŠ2åå®è¡ãããŸããïŒã
- èŠçŽ ãæ¯èŒããããšã«ããæ€çŽ¢ãšåé€ã¯æå°éã§ãã
- ãã©ã°ã©ã1ã§è¿œå ãããã¢ã€ãã ã®åé€ã
ãã¹ãçµæãè¡šã«ç€ºããŸãã
åé | ç¹°ãè¿ãåæ° | è²»ãããæé |
---|
LinkedHashMap | 10,000,000 | 1985±90ããªç§ |
ããªãŒã»ãã | 10,000,000 | 1190±25ããªç§ |
ããã·ã¥ã»ãã | 1,000,000 | 4350±100ããªç§ |
ããã·ã¥ããªãŒ | 10,000,000 | 935±25ããªç§ |
ãã®çµæã
LinkedHashMapã«æ¯ã¹ãŠ
HashTreeã³ã¬ã¯ã·ã§ã³ã®é床ã2å以äžé«ãã
TreeSetã«æ¯ã¹ãŠ1.27å
é«éã§ã ïŒ
HashSetãèæ
®ããããšã¯ãŸã£ããæå³ããããŸããïŒã ãã®ãã§ãã¯ã¯ã4GBã®RAMãšAMD PhenomïŒtmïŒII X4 940ããã»ããµãŒãOS-32ãããWindows7 ProfessionalãæèŒãããã·ã³ã§å®è¡ãããŸããã