ãã®èšäºå šäœã§äœ¿çšãã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) {// , // , if (nodes[p].left == node) { nodes[p].left = null; } if (nodes[p].right == node) { nodes[p].right = null; } } connectNodes(nodes[p], l); return data; }
ããã§ã¯ãåé€ããèŠçŽ ã®ããã·ã¥ã³ãŒãã䜿çšããŠãåé€ããããªãŒã®ããŒããé åããæœåºããŸãã åé€ããããŒãã®ç¥å ã䜿çšããŠãèŠçŽ ãåé€ããŸãããã®éããµãããªãŒã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ãæèŒãããã·ã³ã§å®è¡ãããŸããã