
ãã®èšäºã¯ãåå¿è ã«ãšã£ãŠïŒã³ã¬ã¯ã·ã§ã³ãäœã§ããããã³ã¬ã¯ã·ã§ã³ãã©ã®ããã«æ±ããã«ã€ããŠã®äžè¬çãªç解ãåŸãããã«ïŒããŸã圹ã«ç«ã€ã³ã¬ã¯ã·ã§ã³ãèŠã€ããããåã«ç¥èãæ§ç¯ãããããçµéšè±å¯ãªããã°ã©ããŒã®äž¡æ¹ã«åœ¹ç«ã¡ãŸãã å®éãäž»èŠãªããšã¯ãã©ã®ããã°ã©ãã³ã°èšèªã®ã³ã¬ã¯ã·ã§ã³ã«ã€ããŠãå°ãªããšãåºæ¬çãªç¥èãæã£ãŠããããšã§ããããã¯ãã³ã¬ã¯ã·ã§ã³ãååãšããŠäœã§ãããã«ã€ããŠã®èšäºã«ã¯èª¬æããªãããã§ãã
äžè¬çãªç®æ¬¡ãããŒãã·ãŒãã
1. JPAãšHibernateã®è³ªåãšåç
2. GitHubã§æã人æ°ã®ãã350以äžã®éã¢ãã€ã«JavaãªãŒãã³ãœãŒã¹ãããžã§ã¯ã
3. Javaã®ã³ã¬ã¯ã·ã§ã³ïŒæšæºãã°ã¢ããApacheãTroveãGSã³ã¬ã¯ã·ã§ã³ãªã©
4. Java Stream API
5.è¬çŸ©ããã³Javaã®è¬çŸ©ã®250ã®ãã·ã¢èªæè²ãããª
6. Javaããã°ã©ããŒåãã®äŸ¿å©ãªãªã³ã¯ã®ãªã¹ã
7å žåçãªã¿ã¹ã¯
7.1 InputStreamãæååã«å€æããæé©ãªæ¹æ³
7.2éšåæååã®åºçŸåæ°ãã«ãŠã³ãããããããããã€ãã¹ããæãçç£çãªæ¹æ³
8. Jsonãšé£æºããããã®ã©ã€ãã©ãªïŒGsonãFastjsonãLoganSquareãJacksonãJsonPathãªã©ïŒ
2. GitHubã§æã人æ°ã®ãã350以äžã®éã¢ãã€ã«JavaãªãŒãã³ãœãŒã¹ãããžã§ã¯ã
3. Javaã®ã³ã¬ã¯ã·ã§ã³ïŒæšæºãã°ã¢ããApacheãTroveãGSã³ã¬ã¯ã·ã§ã³ãªã©
4. Java Stream API
5.è¬çŸ©ããã³Javaã®è¬çŸ©ã®250ã®ãã·ã¢èªæè²ãããª
6. Javaããã°ã©ããŒåãã®äŸ¿å©ãªãªã³ã¯ã®ãªã¹ã
7å žåçãªã¿ã¹ã¯
7.1 InputStreamãæååã«å€æããæé©ãªæ¹æ³
7.2éšåæååã®åºçŸåæ°ãã«ãŠã³ãããããããããã€ãã¹ããæãçç£çãªæ¹æ³
8. Jsonãšé£æºããããã®ã©ã€ãã©ãªïŒGsonãFastjsonãLoganSquareãJacksonãJsonPathãªã©ïŒ
I.æšæºJavaã³ã¬ã¯ã·ã§ã³ã©ã€ãã©ãª
åœç¶ãã»ãšãã©ãã¹ãŠã®äººããã§ã«JDKã®ã¡ã€ã³ã³ã¬ã¯ã·ã§ã³ãç¥ã£ãŠããŸããããããã«ã€ããŠã¯ãŸã èŠããŠãããŠãã ãããæšæºã³ã¬ã¯ã·ã§ã³ã«é¢ãããã¹ãŠãæ¢ã«ç¥ã£ãŠããããšã確å®ãªå Žåã¯ããã¿ãã¬ã®ãã¹ãŠã次ã®ã»ã¯ã·ã§ã³ã«å®å šã«ã¹ãããã§ããŸãã
åå¿è
åãã³ã¬ã¯ã·ã§ã³ããŒã
åå¿è
ã«ãšã£ãŠïŒç¹ã«ä»ã®ããã°ã©ãã³ã°èšèªããåãæ¿ããå ŽåïŒãJavaã³ã¬ã¯ã·ã§ã³ã«ä¿åãããŠããã®ã¯ãªã³ã¯/ãã€ã³ã¿ãŒã®ã¿ã§ããããã以äžã®ãã®ã§ã¯ãªãããšãç解ããã®ãéåžžã«é£ããå ŽåããããŸãã addãŸãã¯putãåŒã³åºããšããªããžã§ã¯ãã¯å®éã«ã¯ã³ã¬ã¯ã·ã§ã³å
ã®ã©ããã«æ ŒçŽãããŠããããã§ããããã¯ãããªããã£ãåã§åäœããé
åã«ã®ã¿åœãŠã¯ãŸãããªã³ã¯ã®ã¿ãæ ŒçŽããã³ã¬ã¯ã·ã§ã³ã«ã¯åœãŠã¯ãŸããŸããã ãã®ããããArrayListã³ã¬ã¯ã·ã§ã³ã®æ£ç¢ºãªãµã€ãºã«ååãä»ããããšã¯ã§ããŸããïŒããªã©ã®ã€ã³ã¿ãã¥ãŒã®è³ªåã«å¯ŸããŠãåå¿è
ã¯ãä¿åãããŠãããªããžã§ã¯ãã®çš®é¡ã«äŸåããããªã©ã®è³ªåã«çãå§ããŸãã ã³ã¬ã¯ã·ã§ã³ã¯ãªããžã§ã¯ãèªäœãä¿åããããªããžã§ã¯ããžã®ãªã³ã¯ã®ã¿ãä¿åãããããããã¯å®å
šã«ééã£ãŠããŸãã ããšãã°ãåããªããžã§ã¯ãããªã¹ãã«100äžåè¿œå ã§ããŸãïŒããæ£ç¢ºã«ã¯ã1ã€ã®ãªããžã§ã¯ãã«100äžã®ãªã³ã¯ãäœæããŸãïŒã
1ïŒJDKã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹
JDKã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹
åéã€ã³ã¿ãŒãã§ãŒã¹
java.util.concurrentããã±ãŒãžã®ã€ã³ã¿ãŒãã§ãŒã¹
java.util.concurrentã®ã€ã³ã¿ãŒãã§ãŒã¹ããã³ã³ã¬ã¯ã·ã§ã³ã«é¢ãã詳现æ å ±ã«èå³ãããå Žåã¯ã
ãã¡ãã®èšäºãã芧ãã ãã ã
åœ¹è· | 説æ |
---|---|
å埩å¯èœ | ã³ã¬ã¯ã·ã§ã³ã«ã€ãã¬ãŒã¿ããããforïŒType valueïŒcollectionïŒã§ãã€ãã¹ã§ããããšãæå³ããã€ã³ã¿ãŒãã§ãŒã¹ã ã»ãšãã©ãã¹ãŠã®ã³ã¬ã¯ã·ã§ã³ïŒããããé€ãïŒ
|
åé | ã»ãšãã©ã®ã³ã¬ã¯ã·ã§ã³ã®ã¡ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ïŒããããé€ãïŒ |
äžèŠ§ | ãªã¹ãã¯é åºä»ããããã³ã¬ã¯ã·ã§ã³ã§ãããã·ãŒã±ã³ã¹ãšãåŒã°ããŸãã
ïŒã·ãŒã±ã³ã¹ïŒã ã»ãšãã©ã®å®è£ ã§èŠçŽ ã®éè€ã¯èš±å¯ãããŠããŸãã ã¢ã¯ã»ã¹ãèš±å¯ããŸã èŠçŽ ã€ã³ããã¯ã¹ã ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãæ¡åŒµããŸãã |
ã»ãã | ã»ããã§ã®äœæ¥ãå®è£
ããã€ã³ã¿ãŒãã§ãŒã¹ïŒæ°åŠã»ããã«é¡äŒŒïŒãè€è£œ
ã¢ã€ãã ã¯çŠæ¢ãããŠããŸãã 泚æããå Žåãšããªãå ŽåããããŸãã ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãæ¡åŒµããŸãã |
ãã¥ãŒ | ãã¥ãŒã¯ãã³ã¬ã¯ã·ã§ã³ã«å¯Ÿããéåžžã®æäœãšã¯ç°ãªããåŠçåã«ãªããžã§ã¯ããä¿åããããšãç®çãšããã³ã¬ã¯ã·ã§ã³ã§ãããã¥ãŒã¯ãè¿œå ãåä¿¡ã衚瀺ã®ããã®è¿œå ã¡ãœãããæäŸããŸãã ååãšããŠãèŠçŽ ã€ã³ããã¯ã¹ã«ããã¯ã€ãã¯ã¢ã¯ã»ã¹ã«ã¯å«ãŸããŸããã ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãæ¡åŒµ
|
ãã± | åæ¹åãã¥ãŒã䞡端ããã®èŠçŽ ã®è¿œå ãšåé€ããµããŒãããŸãã å±éãã
ãã¥ãŒã€ã³ã¿ãŒãã§ã€ã¹ã |
å°å³ | ããŒãšå€ã®ãããã³ã°ã§åäœããŸãã åããŒã¯1ã€ã®å€ã«ã®ã¿å¯Ÿå¿ããŸãã ã§
ä»ã®ã³ã¬ã¯ã·ã§ã³ãšã¯ç°ãªããã€ã³ã¿ãŒãã§ã€ã¹ïŒCollectionããã³Iterableãå«ãïŒã¯æ¡åŒµãããŸããã |
ãœãŒãæžã¿ã»ãã | èªåçã«ãœãŒããããã»ããããŸãã¯èªç¶é ïŒè©³çŽ°ã«ã€ããŠã¯ã
æ¯èŒå¯èœãªã€ã³ã¿ãŒãã§ãŒã¹ïŒããŸãã¯Comparatorã䜿çšããŸãã ã»ããã€ã³ã¿ãŒãã§ã€ã¹ãæ¡åŒµ |
ãœãŒãæžã¿ããã | ããã¯ãããŒãçš®é¡ããšãŸãã¯äœ¿çšããŠèªåçã«ãœãŒãããããããã§ã
ã³ã³ãã¬ãŒã¿ Mapã€ã³ã¿ãŒãã§ãŒã¹ãæ¡åŒµããŸãã |
ããã²ãŒã·ã§ã³å¯èœã»ãã
| ããã¯ãæå®ãããæ€çŽ¢å€ã«æãè¿ãå€ãèŠã€ããããã®ã¡ãœãããè¿œå ãããSortedSetã§ãã NavigableSetã«ã¢ã¯ã»ã¹ããŠãã€ãã¹ãŸãã¯é çªã«å®è¡ã§ããŸã
å€ã®éé ãŸãã¯æé ã |
ããå¯èœããã
| ããã¯SortedMapã§ãããç¹å®ã®æ€çŽ¢å€ã«æãè¿ãå€ãèŠã€ããããã®ã¡ãœãããè¿œå ããŸããã éé ãŸãã¯
æé ã |
java.util.concurrentããã±ãŒãžã®ã€ã³ã¿ãŒãã§ãŒã¹
åœ¹è· | 説æ |
---|---|
ããããã³ã°ãã¥ãŒ
| ãã¥ãŒã®ãµã€ãºãæ¡ä»¶ä»ãããã¯ãåä¿¡æã®ããŒã¿ã®è¿œå æãŸãã¯ããŒã¿ã®äžè¶³æã®ãªãŒããŒãããŒãåŠçããããŸããŸãªã¡ãœãããèšå®ããæ©èœãå«ããã«ãã¹ã¬ãããã¥ãŒã®å®è£
ïŒäŸå€ãã¹ããŒãããã¹ã¬ãããæ°žç¶çãŸãã¯äžæçã«ãããã¯ãããfalseãè¿ããªã©ïŒ
|
TransferQueue
| ãã®ãã«ãã¹ã¬ãããã¥ãŒã¯ãåä¿¡ã¹ã¬ãããèŠçŽ ããã¥ãŒãããã«ãããŸã§æ¿å
¥ã¹ã¬ããããããã¯ã§ãããããã¹ã¬ããéã®åæããã³éåæã¡ãã»ãŒãžè»¢éã®å®è£
ã«äœ¿çšã§ããŸãã
|
Blockingdeque
| BlockingQueueã«äŒŒãŠããŸãããåæ¹åãã¥ãŒçšã§ã |
ã³ã³ã«ã¬ã³ãããã
| ã€ã³ã¿ãŒãã§ãŒã¹ãMapã€ã³ã¿ãŒãã§ãŒã¹ãæ¡åŒµããŸãã å€æ°ã®æ°ããã¢ãããã¯ã¡ãœãããè¿œå ããŸãïŒputIfAbsentãremoveãreplaceããã«ãã¹ã¬ããããã°ã©ãã³ã°ãç°¡åãã€å®å
šã«ããŸãã
|
䞊è¡ããã²ãŒã·ã§ã³å¯èœããã
| ãã«ãã¹ã¬ããããŒãžã§ã³çšã«NavigableMapã€ã³ã¿ãŒãã§ãŒã¹ãæ¡åŒµ |
java.util.concurrentã®ã€ã³ã¿ãŒãã§ãŒã¹ããã³ã³ã¬ã¯ã·ã§ã³ã«é¢ãã詳现æ å ±ã«èå³ãããå Žåã¯ã
ãã¡ãã®èšäºãã芧ãã ãã ã
2ïŒãã¹ãŠã®ã³ã¬ã¯ã·ã§ã³ã®éåžžã«ç°¡åãªèª¬æãå«ãè¡š
ãã¹ãŠã®ã³ã¬ã¯ã·ã§ã³ã®éåžžã«ç°¡åãªèª¬æãå«ãè¡š
*-å®éã«ã¯ãBitSetã¯SetãšåŒã°ããŸãããSetã€ã³ã¿ãŒãã§ã€ã¹ã¯ç¶æ¿ããŸããã
çš®é¡ | ã·ã³ã°ã«ã¹ã¬ãã | ãã«ãã¹ã¬ãã |
---|---|---|
ãªã¹ã |
|
|
ãã¥ãŒ/ Deques |
|
|
å°å³
|
|
|
ã»ãã
|
|
|
*-å®éã«ã¯ãBitSetã¯SetãšåŒã°ããŸãããSetã€ã³ã¿ãŒãã§ã€ã¹ã¯ç¶æ¿ããŸããã
3ïŒJDKã®éæšå¥šã®ã³ã¬ã¯ã·ã§ã³
éæšå¥šã®Javaã³ã¬ã¯ã·ã§ã³
å»æ¢ïŒã¬ã¬ã·ãŒïŒãšèŠãªãããæ±çšãŠãããŒãµã«ã³ã¬ã¯ã·ã§ã³
åŸæ¥ã®ã³ã¬ã¯ã·ã§ã³ã«åºã¥ããŠæ§ç¯ãããç¹æ®ãªã³ã¬ã¯ã·ã§ã³
å | 説æ |
---|---|
ããã·ã¥ããŒãã«
| åœåã¯HashMapã®åæã¢ããã°ãšããŠèããããŠããŸãããããŸã å¯èœã§ã¯ãããŸããã§ãã
Collecions.synchronizedMapã䜿çšããŠã³ã¬ã¯ã·ã§ã³ã®ããŒãžã§ã³ãååŸããŸãã çŸæç¹ã§ã¯ãååãšã㊠ConcurrentHashMapã䜿çšããŸãã HashTableã¯åæãããé ããã¹ã¬ããã»ãŒãã§ã¯ãããŸãã HashMapãå®å šãªã¬ãã«ã§ã¯ãªããåã ã®æäœã®ã¬ãã«ã§åæãæäŸããŸãã ã³ã¬ã¯ã·ã§ã³ã |
ãã¯ãã« | 以åã¯ArrayListã®åæããŒãžã§ã³ãšããŠäœ¿çšãããŠããŸãããã次ã®çç±ãšåãçç±ã§å»æ¢ãããŸãã
ããã·ã¥ããŒãã« |
ã¹ã¿ã㯠| 以åã¯ãã¥ãŒã®æ§ç¯ã«äœ¿çšãããŠããŸãããããã¯ã¿ãŒã«åºã¥ããŠæ§ç¯ãããŠããããã
ãŸããé埳çã«æ代é ããšèŠãªãããŸãã |
åŸæ¥ã®ã³ã¬ã¯ã·ã§ã³ã«åºã¥ããŠæ§ç¯ãããç¹æ®ãªã³ã¬ã¯ã·ã§ã³
å | ã«åºã¥ã㊠| 説æ |
---|---|---|
ç©æ§
| ããã·ã¥ããŒãã« | Hashtableã«åºã¥ããŠæ§ç¯ãããããŒã¿æ§é ãšããŠãPropertiesã¯ããªãæ代é
ãã®æ§é ã§ãã
æååãå«ããããã䜿çšããããšããå§ãããŸãã ããããã£ã®è©³çŽ° ãã®è°è«ã§æšèŠãããªã䜿çšãèŠã€ããããšãã§ããŸãã |
UIDefaults
| ããã·ã¥ããŒãã« | Swingã³ã³ããŒãã³ãã®ããã©ã«ãèšå®ãä¿åããã³ã¬ã¯ã·ã§ã³ |
4ïŒ ãªã¹ãã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããã³ã¬ã¯ã·ã§ã³
Listã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããã³ã¬ã¯ã·ã§ã³
ãªã¹ããå®è£
ããæ±çšãŠãããŒãµã«ã³ã¬ã¯ã·ã§ã³ïŒ
java.util.concurrentããã±ãŒãžã®ã³ã¬ã¯ã·ã§ã³
ãªã¹ãã«åºã¥ãé«åºŠã«å°éåãããã³ã¬ã¯ã·ã§ã³ã
*-ãµã€ãºã¯32ãããã·ã¹ãã ããã³å§çž®Oopsã®ãã€ãåäœã§æå®ãããŸããNã¯ãªã¹ãã®å®¹éã§ã
åœ¹è· | ã«ãã£ãŠèšç«ãããŸãã
ã« | 説æ | ãµã€ãº* |
---|---|---|---|
é
åãªã¹ã
| äžèŠ§ | åçã«å€åããé
åã«åºã¥ããListã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã ã»ãšãã©ã®å ŽåãListã€ã³ã¿ãŒãã§ã€ã¹ã®æé©ãªå®è£
ã¯ãã¡ã¢ãªæ¶è²»ãšããã©ãŒãã³ã¹ã§ãã éåžžã«ãŸããªã±ãŒã¹ã§ããªã¹ãã®å
é ãŸãã¯äžå€®ã«éåžžã«å°ããæååãé »ç¹ã«æ¿å
¥ããå¿
èŠãããå Žå
ãªã¹ãäžã®ç§»ååæ°ã«ãããLinkedListã¯ããã©ãŒãã³ã¹ã®åäžã«ã€ãªãããŸãïŒãã ãããããã®å Žåã¯ãApacheã®TreeListã䜿çšããããšããå§ãããŸãïŒã 詳现ãèå³æ·±ãArrayListã§ããå Žåããã®èšäºãåç §ããããšããå§ãããŸãã | 4 * N
|
LinkedList
| äžèŠ§ | åæ¹åãªã³ã¯ãªã¹ãã«åºã¥ããListã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ãã€ãŸããåèŠçŽ ãåã®èŠçŽ ãšæ¬¡ã®èŠçŽ ãæããŠããå Žåã ååãšããŠãArrayListãããå€ãã®ã¡ã¢ãªãšããã©ãŒãã³ã¹ãå¿
èŠã§ãããªã¹ãå
ã®æå°ã®ç§»åã§ãªã¹ãã®äžå€®ã§ã®æ¿å
¥/åé€ãå¿
èŠã«ãªãããšãå€ããŸããªå Žåã«ã®ã¿äœ¿çšããã®ãçã«ããªã£ãŠããŸãïŒãã ãããããã®å Žåã¯ApacheããTreeListã䜿çšããããšããå§ãããŸãã Dequeã€ã³ã¿ãŒãã§ã€ã¹ã Queueã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠäœæ¥ããå ŽåãLinkedListã¯FIFOãã¥ãŒãšããŠæ©èœããŸãã LinkedListã®è©³çŽ°ã«èå³ãããå Žåã¯ããã®èšäºãåç
§ããããšããå§ãããŸãã
| 24 * N
|
java.util.concurrentããã±ãŒãžã®ã³ã¬ã¯ã·ã§ã³
åœ¹è· | ã«ãã£ãŠèšç«ãããŸãã
ã« | 説æ |
---|---|---|
CopyOnWriteArrayList
| äžèŠ§ | ArrayListã«äŒŒãListã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã§ããããªã¹ããå€æŽããããã³ã«äœæãããŸã
ã³ã¬ã¯ã·ã§ã³å šäœã®æ°ããã³ããŒã ããã«ã¯ãã³ã¬ã¯ã·ã§ã³ãå€æŽããããã³ã«éåžžã«å€§ããªãªãœãŒã¹ãå¿ èŠã§ãã ãã ãããã®ã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³ã§ã¯ãã³ã¬ã¯ã·ã§ã³ã å埩æéã |
ãªã¹ãã«åºã¥ãé«åºŠã«å°éåãããã³ã¬ã¯ã·ã§ã³ã
åœ¹è· | ã«åºã¥ã㊠| 説æ |
---|---|---|
圹å²ãªã¹ã
| é åãªã¹ã | ããŒã«ïŒããŒã«ïŒã®ãªã¹ããä¿åããããã®ã³ã¬ã¯ã·ã§ã³ã ã«åºã¥ããé«åºŠã«å°éåãããã³ã¬ã¯ã·ã§ã³
ããã€ãã®è¿œå ã¡ãœãããæã€ArrayList |
RoleUnresolvedList
| é åãªã¹ã | æªè§£æ±ºã®ããŒã«ïŒæªè§£æ±ºã®ããŒã«ïŒã®ãªã¹ããä¿åããããã®ã³ã¬ã¯ã·ã§ã³ã é«åºŠã«å°éåããã
ArrayListããŒã¹ã®ã³ã¬ã¯ã·ã§ã³ãšããã€ãã®è¿œå ã¡ãœãã |
AttributeList
| é åãªã¹ã | MBeanå±æ§ãæ ŒçŽããããã®ã³ã¬ã¯ã·ã§ã³ã ArrayListã«åºã¥ãé«åºŠã«å°éåãããã³ã¬ã¯ã·ã§ã³
ããã€ãã®è¿œå ã®æ¹æ³ã§ |
*-ãµã€ãºã¯32ãããã·ã¹ãã ããã³å§çž®Oopsã®ãã€ãåäœã§æå®ãããŸããNã¯ãªã¹ãã®å®¹éã§ã
5ïŒ Setã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããã³ã¬ã¯ã·ã§ã³ïŒå€ãïŒ
Setã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããã³ã¬ã¯ã·ã§ã³ïŒå€ãïŒ
*-ãµã€ãºã¯ã32ãããã·ã¹ãã ããã³å§çž®Oopsã®ãã€ãåäœã§æå®ãããŸããCã¯ãªã¹ãã®å®¹éãSã¯ãªã¹ãã®ãµã€ãºã§ã
ã»ããã«åºã¥ãç¹å¥ãªã³ã¬ã¯ã·ã§ã³
java.util.concurrentããã±ãŒãžã®ã³ã¬ã¯ã·ã§ã³
åœ¹è· | ã«ãã£ãŠèšç«ãããŸãã
ã« | 説æ | ãµã€ãº* |
---|---|---|---|
ããã·ã¥ã»ãã | ã»ãã | ããã·ã¥ããŒãã«ã䜿çšããSetã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã ã»ãšãã©ã®å ŽåãSetã€ã³ã¿ãŒãã§ã€ã¹ã®æé©ãªå®è£
ãå¯èœã§ãã
| 32 * S + 4 * C
|
LinkedHashSet
| ããã·ã¥ã»ãã | ããã·ã¥ããŒãã«ãšãªã³ã¯ãªã¹ãã«åºã¥ãSetã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã HashSetãšã»ãŒåãé床ã§åäœããã¢ããªã³ã»ããã äžè¬ã«ãHashSetãšã»ãŒåãã§ããã»ããã«å¯Ÿããå埩ã®é åºã®ã¿ããèŠçŽ ãè¿œå ããé åºã«ãã£ãŠæ±ºå®ãããŸã
åããŠèšå®ããŸãã | 40 * S + 4 * C |
ããªãŒã»ãã | ããã²ãŒã·ã§ã³å¯èœã»ãã
| èµ€é»æšã䜿çšããNavigableSetã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã ã³ã³ãã¬ãŒã¿ãŸãã¯èªç¶é åºã䜿çšããŠãœãŒããããŸããã€ãŸãããœãŒãèŠåã«å¿ããŠè€æ°ã®ãã©ããŒãµã«/å埩ãçºçããŸãã HashMapã«åºã¥ãHashSetã®ãããªTreeMapã«åºã¥ã
| 40 * S |
Enumset | ã»ãã | ããããã¯ãã«ã«åºã¥ãSetãã¯ãã«ã€ã³ã¿ãŒãã§ã€ã¹ã®é«æ§èœå®è£
ã EnumSetãªããžã§ã¯ãã®ãã¹ãŠã®èŠçŽ ã¯ã1ã€ã®åäžã®åæåã«å±ããŠããå¿
èŠããããŸã
| S / 8 |
*-ãµã€ãºã¯ã32ãããã·ã¹ãã ããã³å§çž®Oopsã®ãã€ãåäœã§æå®ãããŸããCã¯ãªã¹ãã®å®¹éãSã¯ãªã¹ãã®ãµã€ãºã§ã
ã»ããã«åºã¥ãç¹å¥ãªã³ã¬ã¯ã·ã§ã³
åœ¹è· | ã«ãã£ãŠèšç«ãããŸãã
ã« | 説æ |
---|---|---|
JobStateReasons
| ããã·ã¥ã»ãã | å°å·ãžã§ãã«é¢ããæ
å ±ïŒå°å·ãžã§ãã®å±æ§ã»ããïŒãä¿åããããã®ã³ã¬ã¯ã·ã§ã³ã
ããã€ãã®è¿œå ã¡ãœãããåããHashSetã«åºã¥ãé«åºŠã«å°éåãããã³ã¬ã¯ã·ã§ã³ |
java.util.concurrentããã±ãŒãžã®ã³ã¬ã¯ã·ã§ã³
åœ¹è· | ã«ãã£ãŠèšç«ãããŸãã
ã« | 説æ |
---|---|---|
CopyOnWriteArraySet
| ã»ãã | åæ§ã«ãCopyOnWriteArrayListã¯å€æŽããšã«ã»ããå
šäœã®ã³ããŒãäœæããããã
éåžžã«ãŸããªã³ã¬ã¯ã·ã§ã³ã®å€æŽããã³ã¹ã¬ããã»ãŒãèŠä»¶ã«æšå¥š |
ConcurrentSkipListSet
| ã»ãã | TreeSetã®ãã«ãã¹ã¬ããã¢ããã°ã§ãã |
6ïŒ Mapã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããã³ã¬ã¯ã·ã§ã³ïŒé£æ³é åïŒ
Mapã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããã³ã¬ã¯ã·ã§ã³
Mapãå®è£
ããæ±çšæ±çšã³ã¬ã¯ã·ã§ã³ïŒ
*-ãµã€ãºã¯32ãããã·ã¹ãã ããã³å§çž®Oopsã®ãã€ãåäœã§æå®ãããŸããCã¯ãªã¹ãã®å®¹éãSã¯ãªã¹ãã®ãµã€ãºã§ã
java.util.concurrentããã±ãŒãžã®ã³ã¬ã¯ã·ã§ã³
åœ¹è· | ã«ãã£ãŠèšç«ãããŸãã
ã« | 説æ | ãµã€ãº* |
---|---|---|---|
ããã·ã¥ããã | å°å³ | ããã·ã¥ããŒãã«ã䜿çšããMapã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ïŒéåæHashtableãšããŠæ©èœãã
ããŒãšnullå€ã®ãµããŒãïŒã ã»ãšãã©ã®å Žåãæé«ã®ããã©ãŒãã³ã¹ãš Mapã€ã³ã¿ãŒãã§ã€ã¹ã®ã¡ã¢ãªå®è£ ã HashMapããã€ã¹ã®è©³çŽ°ãèå³æ·±ãå Žåã¯ããã®èšäºãåç §ããããšããå§ãããŸãã | 32 * S + 4 * C |
LinkedHashMap
| ããã·ã¥ããã | ããã·ã¥ããŒãã«ãšãªã³ã¯ãªã¹ããã€ãŸããããå
ã®ããŒã«åºã¥ããMapã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
è¿œå ãããé ã«ä¿åããã³ãã€ãã¹ãããŸãã ãã®ã³ã¬ã¯ã·ã§ã³ã¯ã»ãŒåããããé«éã§ã ããã·ã¥ããã ãŸãããã£ãã·ã¥ã®äœæã«ã圹ç«ã¡ãŸãïŒ removeEldestEntryïŒMap.EntryïŒïŒã LinkedHashMapããã€ã¹ã®è©³çŽ°ãèå³æ·±ãå Žåã¯ããã®èšäºãåç §ããããšããå§ãããŸãã | 40 * S + 4 * C |
ããªãŒããã | ããå¯èœããã
| èµ€é»ããªãŒã䜿çšããNavigableMapã®å®è£
ãã€ãŸãã³ã¬ã¯ã·ã§ã³ãããŒããã©ããŒã¹ãããšã
åãNavigableMapã䜿çšãããšãããŒã«æãè¿ãå€ãæ€çŽ¢ã§ããŸãã | 40 * S |
匱ç¹ããã
| å°å³ | HashMapãšåæ§ã§ããããã¹ãŠã®ããŒã¯åŒ±ãã§ã
匱ãåç §ãã€ãŸãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«ããããªããžã§ã¯ãã®ããŒãšãªããžã§ã¯ããåé€ãããå¯èœæ§ããããŸã ãããã®ãªããžã§ã¯ããžã®ä»ã®åç §ãååšããªãå Žåã®å€ã WeakHashMapã¯æãç°¡åãªãã®ã®1ã€ã§ã 匱ããªã³ã¯ãæ倧éã«æŽ»çšããæ¹æ³ã | 32 * S + 4 * C |
Enummap | å°å³ | åçŽãªé
åã«åºã¥ããMapã€ã³ã¿ãŒãã§ãŒã¹ã®é«æ§èœå®è£
ã ãã¹ãŠã®ããŒ
ãã®ã³ã¬ã¯ã·ã§ã³ã¯ã1ã€ã®åæåã«ã®ã¿å±ããããšãã§ããŸãã | 4 * C |
IdentityHashMap
| å°å³ | HashMapã®ãããªIDããŒã¹ã®ãããã¯ããã·ã¥ããŒãã«ã«åºã¥ããŠããŸãããHashMapãšã¯ç°ãªãã
çãããªããžã§ã¯ããæ¯èŒããããšã¯ãããŸãããå®éã«åããã©ããã®ã¿ãæ¯èŒããŸã ã¡ã¢ãªå ã®ãªããžã§ã¯ãã 第äžã«ãã³ã¬ã¯ã·ã§ã³ã®äœæ¥ãå€§å¹ ã«é«éåãã第äºã«ã çãããå¥ã®ãªããžã§ã¯ãã«ãã£ãŠæå³çã«çæãããå Žåã®ãã¹ããŒãã£ã³ã°æ»æãã«å¯Ÿããä¿è·ã 第äžã«ããã®ã³ã¬ã¯ã·ã§ã³ã«ã¯ãã°ã©ãããã©ããŒã¹ãããšãã«å€ãã®çšéããããŸãïŒãã£ãŒãã³ããŒãªã©ïŒ 1ã€ã®ãªããžã§ã¯ããè€æ°ååŠçããããšãé¿ããå¿ èŠãããå Žåã | 8 * C |
*-ãµã€ãºã¯32ãããã·ã¹ãã ããã³å§çž®Oopsã®ãã€ãåäœã§æå®ãããŸããCã¯ãªã¹ãã®å®¹éãSã¯ãªã¹ãã®ãµã€ãºã§ã
java.util.concurrentããã±ãŒãžã®ã³ã¬ã¯ã·ã§ã³
åœ¹è· | ã«ãã£ãŠèšç«ãããŸãã
ã« | 説æ |
---|---|---|
䞊è¡ããã·ã¥ããã
| ã³ã³ã«ã¬ã³ãããã
| HashMapã®ãã«ãã¹ã¬ããã¢ããã°ã ãã¹ãŠã®ããŒã¿ã¯åå¥ã®ã»ã°ã¡ã³ãã«åå²ããããããã¯ãããã®ã¿
å€æŽæã®åã ã®ã»ã°ã¡ã³ãããã«ãã¹ã¬ããã§ã®äœæ¥ãå€§å¹ ã«é«éåããŸã ã¢ãŒãã ã€ãã¬ãŒã¿ã¯ããã®ã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³ã«å¯ŸããŠConcurrentModificationExceptionãã¹ããŒããããšã¯ãããŸããã |
ConcurrentSkipListMap
| 䞊è¡ããã²ãŒã·ã§ã³å¯èœããã
| TreeMapã®ãã«ãã¹ã¬ããã®é¡äŒŒç©ã§ã |
7ïŒ ãã¥ãŒ/ããã¥ãŒã€ã³ã¿ãŒãã§ã€ã¹ ïŒãã¥ãŒïŒã«åºã¥ãã³ã¬ã¯ã·ã§ã³
ãã¥ãŒ/ããã¥ãŒããŒã¹ã®ã³ã¬ã¯ã·ã§ã³
*-ãµã€ãºã¯ã32ãããã·ã¹ãã ããã³å§çž®Oopsã®ãã€ãåäœã§æå®ãããŸããCã¯ãªã¹ãã®å®¹éãSã¯ãªã¹ãã®ãµã€ãºã§ã
java.util.concurrentã§å®çŸ©ãããŠãããã«ãã¹ã¬ãããã¥ãŒãšããã¯ã«ã¯å¥ã®èšäºãå¿ èŠãªã®ã§ãããã§ã¯èª¬æããŸããããããã®æ å ±ã«èå³ãããå Žåã¯ããã®èšäºãèªãããšããå§ãããŸãã
åœ¹è· | ã«ãã£ãŠèšç«ãããŸãã
ã« | 説æ | ãµã€ãº* |
---|---|---|---|
é
å
| ãã± | åçé
åã«åºã¥ãDequeã€ã³ã¿ãŒãã§ãŒã¹ã®å¹ççãªå®è£
ãé¡äŒŒ
é åãªã¹ã | 6 * N |
LinkedList
| ãã± | åæ¹åãªã³ã¯ãªã¹ãã«åºã¥ãList and Dequeã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ãã€ãŸããåèŠçŽ ãåã®èŠçŽ ãšæ¬¡ã®èŠçŽ ãæãå ŽåãQueueã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠäœæ¥ããå ŽåãLinkedListã¯FIFOãã¥ãŒãšããŠæ©èœããŸãã
| 40 * N |
PriorityQueue
| ãã¥ãŒ | ããŒãïŒããŒãïŒã«åºã¥ãç¡å¶éã®åªå
床ãã¥ãŒã ãœãŒããããã¢ã€ãã
ããããŸãããŸãã¯ã³ã³ãã¬ãŒã¿ã䜿çšããŠã nullèŠçŽ ãå«ããããšã¯ã§ããŸããã |
*-ãµã€ãºã¯ã32ãããã·ã¹ãã ããã³å§çž®Oopsã®ãã€ãåäœã§æå®ãããŸããCã¯ãªã¹ãã®å®¹éãSã¯ãªã¹ãã®ãµã€ãºã§ã
java.util.concurrentã§å®çŸ©ãããŠãããã«ãã¹ã¬ãããã¥ãŒãšããã¯ã«ã¯å¥ã®èšäºãå¿ èŠãªã®ã§ãããã§ã¯èª¬æããŸããããããã®æ å ±ã«èå³ãããå Žåã¯ããã®èšäºãèªãããšããå§ãããŸãã
8ïŒãã®ä»ã®ã³ã¬ã¯ã·ã§ã³
ãã®ä»ã®ã³ã¬ã¯ã·ã§ã³
åœ¹è· | 説æ | ãµã€ãº* |
---|---|---|
ãããã»ãã
| ãã®ååã«ãããããããBitSetã¯Setã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããŸããã BitSetã¯ããããé
åã®ã³ã³ãã¯ããªèšé²ã«äœ¿çšãããŸãã
| N / 8
|
9ïŒã³ã¬ã¯ã·ã§ã³ãæäœããæ¹æ³
ã³ã¬ã¯ã·ã§ã³ã¡ãœãã
ã¢ã«ãŽãªãºã -ã³ã¬ã¯ã·ã§ã³ã¯ã©ã¹ã«ã¯ãå€ãã®äŸ¿å©ãªçµ±èšææ³ãå«ãŸããŠããŸãã
ã³ã¬ã¯ã·ã§ã³ãæäœããã«ã¯ïŒ
ãªã¹ãã䜿çšããã«ã¯ïŒ
Java 8ã§ã¯ãã¹ããªãŒã Apiãªã©ã®ã³ã¬ã¯ã·ã§ã³ãæäœããæ¹æ³ãå°å ¥ãããŸãããããã®äœ¿çšäŸã«ã€ããŠã¯ã»ã¯ã·ã§ã³5ã§åŸè¿°ããŸãã
ã³ã¬ã¯ã·ã§ã³ãæäœããã«ã¯ïŒ
æ¹æ³ | 説æ |
---|---|
é »åºŠ ïŒã³ã¬ã¯ã·ã§ã³ããªããžã§ã¯ãïŒ
| æå®ãããã³ã¬ã¯ã·ã§ã³å ã®ãã®èŠçŽ ã®åºçŸåæ°ãè¿ããŸãã |
disjoint ïŒã³ã¬ã¯ã·ã§ã³ãã³ã¬ã¯ã·ã§ã³ïŒ | 2ã€ã®ã³ã¬ã¯ã·ã§ã³ã«å ±éã®èŠçŽ ããªãå Žåãtrueãè¿ããŸãã |
addAll ïŒã³ã¬ã¯ã·ã§ã³<ïŒã¹ãŒããŒT>ãT ...ïŒ | æå®ãããé åïŒãŸãã¯ãã©ã¡ãŒã¿ãŒã«ãªã¹ããããŠããïŒã®ãã¹ãŠã®èŠçŽ ãæå®ãããã³ã¬ã¯ã·ã§ã³ã«è¿œå ããŸã |
min ïŒã³ã¬ã¯ã·ã§ã³ïŒ | ã³ã¬ã¯ã·ã§ã³ããæå°ã¢ã€ãã ãè¿ããŸã |
max ïŒã³ã¬ã¯ã·ã§ã³ïŒ | ã³ã¬ã¯ã·ã§ã³ããæ倧ã®ã¢ã€ãã ãè¿ããŸã |
ãªã¹ãã䜿çšããã«ã¯ïŒ
æ¹æ³ | 説æ |
---|---|
ãœãŒã ïŒãªã¹ãïŒ | ã»ãšãã©ã®å Žåãããã©ãŒãã³ã¹ãé«å質ã®ã¯ã€ãã¯ãœãŒãã®ããã©ãŒãã³ã¹ã«è¿ãããŒãžãœãŒãã¢ã«ãŽãªãºã ã䜿çšãããœãŒãã«ãããOïŒn * log nïŒããã©ãŒãã³ã¹ïŒã¯ã€ãã¯ãœãŒãã§ã¯ãªãïŒãšå®å®æ§ïŒã¯ã€ãã¯ãœãŒãïŒã å®å®ãããœãŒãã¯ããœãŒãæã«åãèŠçŽ ã®é åºãå€æŽããªããã®ã§ã |
binarySearch ïŒãªã¹ãããªããžã§ã¯ãïŒ | ãã€ããªæ€çŽ¢ã¢ã«ãŽãªãºã ã䜿çšããŠããªã¹ãå ã®ã¢ã€ãã ãæ€çŽ¢ããŸãã |
ãªããŒã¹ ïŒãªã¹ãïŒ | ãã¹ãŠã®ãªã¹ãã¢ã€ãã ã䞊ã¹æ¿ãã |
ã·ã£ããã« ïŒãªã¹ãïŒ | ãªã¹ãå ã®ãã¹ãŠã®ã¢ã€ãã ãã©ã³ãã ã«ã·ã£ããã«ããŸã |
fill ïŒãªã¹ãããªããžã§ã¯ãïŒ | ãªã¹ãå ã®åã¢ã€ãã ãå€ã§äžæžããã |
ã³ã㌠ïŒãªã¹ãéä¿¡å ããªã¹ãéä¿¡å ïŒ | ãããªã¹ããå¥ã®ãªã¹ãã«ã³ããŒãã |
å転 ïŒãªã¹ããªã¹ããintè·é¢ïŒ | ãªã¹ãå ã®ãã¹ãŠã®ã¢ã€ãã ãæå®ãããè·é¢ã ã移åããŸãã |
replaceAll ïŒãªã¹ããªã¹ãããªããžã§ã¯ãoldValããªããžã§ã¯ãnewValïŒ | ããå€ã®ãã¹ãŠã®åºçŸãå¥ã®å€ã«çœ®ãæããŸã |
indexOfSubList ïŒãªã¹ããœãŒã¹ããªã¹ãã¿ãŒã²ããïŒ | ãœãŒã¹ãªã¹ãã§ã¿ãŒã²ãããªã¹ããæåã«çŸããã€ã³ããã¯ã¹ãè¿ããŸã |
lastIndexOfSubList ïŒãªã¹ããœãŒã¹ããªã¹ãã¿ãŒã²ããïŒ | ãœãŒã¹ãªã¹ãå ã®ã¿ãŒã²ãããªã¹ãã®æåŸã®åºçŸã®ã€ã³ããã¯ã¹ãè¿ããŸã |
ã¹ã¯ãã ïŒãªã¹ããintãintïŒ | æå®ãããäœçœ®ã«ããèŠçŽ ã亀æããŸã |
Java 8ã§ã¯ãã¹ããªãŒã Apiãªã©ã®ã³ã¬ã¯ã·ã§ã³ãæäœããæ¹æ³ãå°å ¥ãããŸãããããã®äœ¿çšäŸã«ã€ããŠã¯ã»ã¯ã·ã§ã³5ã§åŸè¿°ããŸãã
10ïŒããŸããŸãªã¿ã€ãã®JDKã³ã¬ã¯ã·ã§ã³ã¯å éšã§ã©ã®ããã«é 眮ãããŸãã
ããŸããŸãªã¿ã€ãã®JDKã³ã¬ã¯ã·ã§ã³ã¯å
éšã§ã©ã®ããã«é
眮ãããŸãã
åé | å éšããã€ã¹ã®èª¬æ |
---|---|
é åãªã¹ã | ãã®ã³ã¬ã¯ã·ã§ã³ã¯ãé
åã®èšå®+ãªã¹ãã®ãµã€ãºãæ ŒçŽããå€æ°ã§ãã äžã ã
æ°ããèŠçŽ ãè¿œå ããå Žæããªããã³ã«åäœæãããé åã 㧠ã³ã¬ã¯ã·ã§ã³å ã®èŠçŽ ãè¿œå ãŸãã¯åé€ããå Žåãã¡ã¢ãªå šäœã§ããŒã«å šäœãã·ãããããŸã æ°ããå Žæã 幞ããªããšã«ã容éãå¢ãããªããããŸãã¯è¿œå /åé€ãããšãã«ã¢ã¬ã€ãã³ããŒããŸã é«éãªãã€ãã£ã/ã·ã¹ãã ã¡ãœããã«ãã£ãŠçæãããèŠçŽ ã 詳现ãèå³æ·±ãå Žå ãã®èšäºãã芧ã«ãªãããšããå§ãããŸãã |
LinkedList | ã³ã¬ã¯ã·ã§ã³å
ã§ã¯ãåã®èŠçŽ ãžã®ãªã³ã¯ãå«ãå
éšNodeã¯ã©ã¹ã䜿çšããã
次ã®èŠçŽ ãšèŠçŽ èªäœã®å€ã ã³ã¬ã¯ã·ã§ã³ã€ã³ã¹ã¿ã³ã¹èªäœã«ãµã€ãºãšãªã³ã¯ãæ ŒçŽãããŸã ã³ã¬ã¯ã·ã§ã³ã®æåãšæåŸã®èŠçŽ ã ãªããžã§ã¯ããäœæããããšã¯ã ããã©ãŒãã³ã¹ãšã¡ã¢ãªãéäžçã«äœ¿çšããLinkedList ã¢ããã°ãããã¯ããã«å€ãã®ã¡ã¢ãªã éåžžãArrayListãArrayDequeryã¯ããã©ãŒãã³ã¹ãšã¡ã¢ãªã®æé©ãªãœãªã¥ãŒã·ã§ã³ã§ããããŸããªã±ãŒã¹ïŒãªã¹ãã®äžå€®ã«é »ç¹ã«æ¿å ¥ããããªã¹ãå ã®ãŸããªåããçºçããïŒã圹ç«ã€å ŽåããããŸãïŒãã ãããã®å Žåã¯apacheããTreeListã䜿çšããæ¹ã䟿å©ã§ãïŒã 詳现ãèå³æ·±ãå Žåã¯ããã®èšäºãã芧ã«ãªãããšããå§ãããŸãã |
ããã·ã¥ããã | ãã®ã³ã¬ã¯ã·ã§ã³ã¯ãããã·ã¥ããŒãã«äžã«æ§ç¯ãããŸããã€ãŸããã³ã¬ã¯ã·ã§ã³å
ã«ã¯ãã³ã¬ã¯ã·ã§ã³ã®å®¹éã«çããå
éšã¯ã©ã¹ïŒãã±ããïŒããŒãã®é
åããããŸãã æ°ããèŠçŽ ãè¿œå ãããšããã®ããã·ã¥é¢æ°ãèšç®ããããã£ãã·ãã£HashMapã¢ãžã¥ãã§é€ç®ããããããé
åå
ã®èŠçŽ ã®äœçœ®ãèšç®ãããŸãã ãã®å Žæã«èŠçŽ ããŸã ä¿åãããŠããªãå Žåãè¿œå ãããèŠçŽ ãžã®ãªã³ã¯ãå«ãæ°ããNodeãªããžã§ã¯ããäœæãããé
åå
ã®ç®çã®å Žæã«æžã蟌ãŸããŸãã ãã®å Žæã«æ¢ã«èŠçŽ ãååšããå ŽåïŒããã·ã¥è¡çªãçºçããå ŽåïŒãNodeã¯åºæ¬çã«åçŽã«ãªã³ã¯ããããªã¹ãã§ããã€ãŸãã次ã®èŠçŽ ãžã®ãªã³ã¯ãå«ãŸããŸãããªã¹ãå
ã®ãã¹ãŠã®èŠçŽ ããã€ãã¹ããè¿œå ãããèŠçŽ ãšçãããã©ããã確èªã§ããŸããã®ãããªäžèŽãèŠã€ãããªãã£ãå Žåãæ°ããNodeãªããžã§ã¯ããäœæããããªã¹ãã®æåŸã«è¿œå ãããŸãã ãªã³ã¯ãªã¹ãïŒãã±ããïŒã®èŠçŽ ã®æ°ã8åãè¶
ããèŠçŽ ã«ãªããšã代ããã«ãã€ããªããªãŒãäœæãããŸãã ããã·ã¥ããŒãã«ã®è©³çŽ°ã«ã€ããŠã¯ã wikiãåç
§ããŠãã ããïŒHashMapã¯ãã§ãŒã³ã¡ãœããã䜿çšããŠè¡çªã解決ããŸãïŒã HashMapããã€ã¹ã®è©³çŽ°ãèå³æ·±ãå Žåã¯ããã®èšäºãåç
§ããããšããå§ãããŸãã
|
ããã·ã¥ã»ãã | HashSetã¯åãªãHashMapã§ãããå€ã®ä»£ããã«åœã®ãªããžã§ã¯ããæžã蟌ãŸããããŒã®ã¿ãéèŠã§ãã HashSetå
ã«ã¯ãHashMapã³ã¬ã¯ã·ã§ã³ãåžžã«ä¿åãããŸãã
|
IdentityHashMap | IdentityHashMapã¯HashMapã«é¡äŒŒããŠããŸãããèŠçŽ ãçãããã©ããããã§ãã¯ããå¿
èŠããªãããã
2ã€ã®èŠçŽ ã®éãã ç°ãªããªããžã§ã¯ããæããŸãã ããã®ãããã§ã å éšã¯ã©ã¹Nodeãåãé€ãããã¹ãŠã®ããŒã¿ã1ã€ã®é åã«æ ŒçŽããè¡çªãçºçãã é©åãªç©ºãã»ã«ãèŠã€ãããŸã§æ€çŽ¢ãããŸãïŒ ã¡ãœãã ãªãŒãã³ã¢ãã¬ãã·ã³ã° ïŒããã·ã¥ããŒãã«ã®è©³çŽ°ã«ã€ããŠã¯ã wikiãåç §ããŠãã ãã ïŒIdentityHashMapã¯ãªãŒãã³ã¢ãã¬ãã·ã³ã°ã¡ãœããã䜿çšããŠè¡çªã解決ããŸãïŒ |
LinkedHashMap / LinkedHashSet | å
éšæ§é ã¯HashMapãšã»ãŒåãã§ããã代ããã«
å éšã¯ã©ã¹NodeãTreeNodeã䜿çšããŸããTreeNodeã¯åã®å€ãšæ¬¡ã®å€ãç¥ã£ãŠããŸãã ããã«ãããããŒãè¿œå ããé åºã§LinkedHashMapããã€ãã¹ã§ããŸãã åºæ¬çã«LinkedHashMap = HashMap + LinkedListã LinkedHashMapããã€ã¹ã®è©³çŽ°ã«èå³ãããå Žåã¯ããã®èšäºãåç §ããããšããå§ãããŸãã |
TreeMap / TreeSet | ãããã®ã³ã¬ã¯ã·ã§ã³ã®å
éšæ§é ã¯ããã©ã³ã¹ã®åããèµ€é»ã®ããªãŒäžã«æ§ç¯ããã
wikiã§è©³çŽ°ãèªã |
匱ç¹ããã | å
éšã§ã¯ãéåžžã®ãªã³ã¯ã§ã¯ãªãããã¹ãŠãHashMapã®ããã«æŽçãããŠããŸã
WeakReferenceã䜿çšãããåé€ã«å¿ èŠãªå¥ã®ReferenceQueueãã¥ãŒããããŸã 匱ããšã³ã㪠|
EnumSet / EnumMap | EnumSetãšEnumMapã¯ãHashSetãHashMapãšã¯ç°ãªããããããã¯ãã«ãšé
åã䜿çšããŠ
ããŒã¿ã¹ãã¬ãŒãžãã³ã³ãã¯ãã«ããããã©ãŒãã³ã¹ãåäžãããŸãã ãããã®ã³ã¬ã¯ã·ã§ã³ã®å¶é㯠EnumSetãšEnumMapã¯ã1ã€ã®Enumã®å€ã®ã¿ãããŒãšããŠä¿åã§ããŸãã |
11ïŒæšæºã³ã¬ã¯ã·ã§ã³ã©ã€ãã©ãªã®ä»ã®æçšãªãšã³ãã£ãã£
æšæºã³ã¬ã¯ã·ã§ã³ã©ã€ãã©ãªã®ä»ã®æçšãªãšã³ãã£ãã£
å
¬åŒã®ã³ã¬ã¯ã·ã§ã³ã¬ã€ãã«å«ãŸããä»ã®æçšãªãšã³ãã£ãã£ãèŠãŠã¿ãŸãããã
1ïŒ ã©ãããŒå®è£ -æ©èœãè¿œå ããä»ã®å®è£ ã®åäœãå€æŽããããã®ã©ãããŒã çµ±èšçææ³ã®ã¿ã䜿çšããŠã¢ã¯ã»ã¹ããŸãã
2ïŒ ã¢ããã¿ã®å®è£ -ãã®å®è£ ã¯ã1ã€ã®ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãå¥ã®ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã«é©åãããŸã
3ïŒ äŸ¿å©ãªå®è£ -ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã®é«æ§èœãªãããå®è£ ãã
4ïŒ ã€ã³ã¿ãŒãã§ã€ã¹ã®æœè±¡çãªå®è£ -ã³ã¬ã¯ã·ã§ã³ã®ç¹å®ã®å®è£ ã®äœæãç°¡çŽ åããããã®å ±éæ©èœïŒã³ã¬ã¯ã·ã§ã³ã®ã¹ã±ã«ãã³ïŒã®å®è£ ã
4ïŒ ã€ã³ãã©
5ïŒæ³šæ
6ïŒã©ã³ã¿ã€ã äŸå€
7ïŒããã©ãŒãã³ã¹
8ïŒé åãæäœããããã®ãŠãŒãã£ãªãã£
1ïŒ ã©ãããŒå®è£ -æ©èœãè¿œå ããä»ã®å®è£ ã®åäœãå€æŽããããã®ã©ãããŒã çµ±èšçææ³ã®ã¿ã䜿çšããŠã¢ã¯ã»ã¹ããŸãã
- Collections.unmodifiableInterface-æå®ãããã³ã¬ã¯ã·ã§ã³ã«åºã¥ããŠå€æŽäžå¯èœãªã³ã¬ã¯ã·ã§ã³ãäœæããããã®ã©ãããŒããã®ã³ã¬ã¯ã·ã§ã³ãå€æŽããããšãããšUnsupportedOperationExceptionãã¹ããŒãããŸã
- Collections.synchronizedInterface-æå®ã«åºã¥ããŠåæã³ã¬ã¯ã·ã§ã³ãäœæããŸããããŒã¹ã³ã¬ã¯ã·ã§ã³ãžã®ã¢ã¯ã»ã¹ããã®é¢æ°ã«ãã£ãŠè¿ãããã³ã¬ã¯ã·ã§ã³ã©ãããŒãä»ããŠããéããã¹ã¬ããã»ãŒããä¿èšŒãããŸãã
- Collections.checkedInterface-åãã§ãã¯ä»ãã®ã³ã¬ã¯ã·ã§ã³ãåçã«è¿ããŸã
ïŒå®è¡æïŒãã€ãŸããæå®ãããã³ã¬ã¯ã·ã§ã³ã®ã¿ã€ãã»ãŒããã¥ãŒãè¿ããŸãã
ééã£ãåã®èŠçŽ ãè¿œå ããããšãããšãClassCastExceptionãã¹ããŒãããŸãã 䜿çšããå Žå
æ±çšJDKã¡ã«ããºã ã¯ãã³ã³ãã€ã«ã¬ãã«ã§åã®ã³ã³ãã€ã«ããã§ãã¯ããŸããããã®ã¡ã«ããºã
ãã€ãã¹ããããšãã§ããåçãªåãã§ãã¯ã§ã¯ãã®æ©äŒãå©çšã§ããŸããã
2ïŒ ã¢ããã¿ã®å®è£ -ãã®å®è£ ã¯ã1ã€ã®ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãå¥ã®ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã«é©åãããŸã
- newSetFromMapïŒMapïŒ-Setã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£ ããMapã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£ ãäœæããŸãã
- asLifoQueueïŒDequeïŒ-Dequeããã®ãã¥ãŒããLast In First OutïŒLIFOïŒã®åçã«åºã¥ãããã¥ãŒãšããŠè¿ããŸãã
3ïŒ äŸ¿å©ãªå®è£ -ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã®é«æ§èœãªãããå®è£ ãã
- Arrays.asList-é åããªã¹ããšããŠè¡šç€ºã§ããŸã
- emptySetãemptyListãããã³emptyMap-空ã®ã»ããããªã¹ãããŸãã¯ç©ºã®æªå€æŽã®å®è£
ãè¿ããŸãã
å°å³
- singletonãsingletonListãsingletonMap -1ã€ã®æå®ããããªããžã§ã¯ãïŒãŸãã¯1ã€ã®ããŒãšå€ã®é¢ä¿ïŒãå«ãå€æŽäžå¯èœãªã»ããããªã¹ãããŸãã¯ããããè¿ããŸã
- nCopies-æå®ããããªããžã§ã¯ãã®nåã®ã³ããŒãå«ãå€æŽäžå¯èœãªãªã¹ããè¿ããŸã
4ïŒ ã€ã³ã¿ãŒãã§ã€ã¹ã®æœè±¡çãªå®è£ -ã³ã¬ã¯ã·ã§ã³ã®ç¹å®ã®å®è£ ã®äœæãç°¡çŽ åããããã®å ±éæ©èœïŒã³ã¬ã¯ã·ã§ã³ã®ã¹ã±ã«ãã³ïŒã®å®è£ ã
- AbstractCollection-ã»ããã§ããªã¹ãã§ããªãã³ã¬ã¯ã·ã§ã³ïŒãããã°ãããã«ãã»ãããªã©ïŒã®Collectionã€ã³ã¿ãŒãã§ã€ã¹ã®æœè±¡å®è£
ã
- AbstractSet -Setã€ã³ã¿ãŒãã§ã€ã¹ã®æœè±¡çãªå®è£ ã
- AbstractList-é
åãªã©ã®ã©ã³ãã ã¢ã¯ã»ã¹ãèš±å¯ãããªã¹ãã®Listã€ã³ã¿ãŒãã§ã€ã¹ã®æœè±¡çãªå®è£
ã
- AbstractSequentialList-ãªã³ã¯ãªã¹ããªã©ã®ã·ãŒã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ããŒã¹ã®ãªã¹ãçšã®Listã€ã³ã¿ãŒãã§ã€ã¹ã®æœè±¡çãªå®è£
ã
- AbstractQueue-æœè±¡ãã¥ãŒã®å®è£ ã
- AbstractMap-æœè±¡ãããã®å®è£ ã
4ïŒ ã€ã³ãã©
- ã€ãã¬ãŒã¿ -éåžžã®åæã€ã³ã¿ãŒãã§ã€ã¹ã«äŒŒãŠããŸãããåªããæ©èœãåããŠããŸãã
- Iterator -Enumerationã€ã³ã¿ãŒãã§ã€ã¹æ©èœã«å ããŠãã³ã¬ã¯ã·ã§ã³ããã¢ã€ãã ãåé€ããæ©èœãå«ãŸããŸãã
- ListIteratorã¯ãªã¹ãã«äœ¿çšãããã€ãã¬ãŒã¿ãŒã§ãåæ¹åã®å埩ãèŠçŽ ã®çœ®æãèŠçŽ ã®æ¿å
¥ãã€ã³ããã¯ã¹ã«ããååŸãªã©ãéåžžã®ã€ãã¬ãŒã¿ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®æ©èœãè¿œå ããŸãã
5ïŒæ³šæ
- æ¯èŒå¯èœ -ããããå®è£
ããã¯ã©ã¹ã®èªç¶ãªãœãŒãé ãå®çŸ©ããŸãã ãã®é åºã¯ããœãŒãæ¹æ³ã§äœ¿çšãããããœãŒããããã»ãããŸãã¯ããããå®è£
ããããã«äœ¿çšã§ããŸãã
- Comparator-é åºé¢ä¿ãè¡šããŸããããã¯ããœãŒããããã»ãããŸãã¯ãããå
ã®ãªã¹ããŸãã¯ã¡ã€ã³é åºããœãŒãããããã«äœ¿çšã§ããŸãã åã®èªç¶ãªé åºããªãŒããŒã©ã€ãããããComparableã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããŠããªãåã®ãªããžã§ã¯ããé åºä»ãããã§ããŸãã
6ïŒã©ã³ã¿ã€ã äŸå€
- UnsupportedOperationException-ãã®ãšã©ãŒã¯ãã³ã¬ã¯ã·ã§ã³ãåŒã³åºãããæäœããµããŒãããŠããªãå Žåã«ã¹ããŒãããŸãã
- ConcurrentModificationException-ã€ãã¬ãŒã¿ãŸãã¯ãªã¹ãã€ãã¬ãŒã¿ãã¹ããŒããŸããã€ãã¬ãŒã¿ãåºã¥ããŠããã³ã¬ã¯ã·ã§ã³ãïŒã¢ã«ãŽãªãºã ã®å ŽåïŒå埩äžã«äºæããå€æŽãããå Žåãã¡ã€ã³ãªã¹ããäºæããå€æŽãããå Žåã¯ãªã¹ãã«åºã¥ãããã¥ãŒãã¹ããŒããŸã
7ïŒããã©ãŒãã³ã¹
- RandomAccess-ãªã¹ããããŒã¯ããããŒã«ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ãäœçœ®ã«ãã£ãŠèŠçŽ ã«ãã°ããïŒéåžžã¯äžå®æéïŒã¢ã¯ã»ã¹ã§ããããã«ããŸãã ããã«ãããã·ãŒã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ãšäœçœ®ã¢ã¯ã»ã¹ã®éžæã«é¢ãããã®åäœãèæ ®ããã¢ã«ãŽãªãºã ãçæã§ããŸãã
8ïŒé åãæäœããããã®ãŠãŒãã£ãªãã£
- é å -é åã®ããã·ã¥ããœãŒããæ€çŽ¢ãæ¯èŒããµã€ãºå€æŽãååŸããããã®éçã¡ãœããã®ã»ããã ãŸããé åãæååã«å€æããé åãããªããã£ããŸãã¯ãªããžã§ã¯ãã§åããããã®ã¡ãœãããå«ãŸããŠããŸãã
IIã ãµãŒãããŒãã£ã®ã³ã¬ã¯ã·ã§ã³ã©ã€ãã©ãªã®æŠèŠ
ãããã£ãŠã次ã®ãµãŒãããŒãã£ã©ã€ãã©ãªã確èªããããšæããŸãïŒguavaãapacheãtroveãgs-collectionsã ãªããããã®ã©ã€ãã©ãªãŒãªã®ãïŒ GuavaãšApache Commonsã³ã¬ã¯ã·ã§ã³ã¯éåžžã«äººæ°ããããã»ãšãã©ãã¹ãŠã®Javaãããžã§ã¯ãã§åºäŒããŸãããTroveã¯ãã¡ã¢ãªãåæžããã³ã¬ã¯ã·ã§ã³ãæäœããããã©ãŒãã³ã¹ãåäžãããå¿ èŠããããšãã«éåžžã«äººæ°ã®ããã©ã€ãã©ãªã§ãã GSã³ã¬ã¯ã·ã§ã³-github'eã§éåžžã«äººæ°ã®ããã©ã€ãã©ãªïŒ1300以äžã®æïŒã®èŠç©ããããå€æãããšãã°ã¢ãã ãããããããå€ãã®ãæããç²åŸããŸããã ä»ã®ããã€ãã®äººæ°ã®ããã©ã€ãã©ãªãå£éèŠãã ãã§ãã
ãããã£ãŠããŸãæåã«ãããŸããŸãªã©ã€ãã©ãªãæäŸããäž»ãªæ©èœãèæ ®ããŠãã ããïŒèŠåïŒããã¯éåžžã«äž»èŠ³çã§ããäžéšã®äººã ã«ãšã£ãŠãäž»ãªæ©èœã¯å®å šã«ç°ãªãã©ã€ãã©ãªæ©èœã«ãªããŸãïŒã
2.1ããŸããŸãªã³ã¬ã¯ã·ã§ã³ã©ã€ãã©ãªã®ããã
ããŸããŸãªã³ã¬ã¯ã·ã§ã³ã©ã€ãã©ãªã®äž»ãªæ©èœïŒç§ã®æèŠã§ã¯ïŒãç°¡åã«ç¢ºèªããŸãããã
1ïŒ ã°ã¢ã-Googleã®ãã®ã³ã¬ã¯ã·ã§ã³ã¯ãæšæºã®ã³ã¬ã¯ã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã«æ¬¡ãã§ã»ãŒæã人æ°ããããŸãã
ããã€ãã®èå³æ·±ãã³ã¬ã¯ã·ã§ã³ãè¿œå ããŸãããæãéèŠãªãããªãã¯ãã¯ãéçãªãŠãŒãã£ãªãã£ã¯ã©ã¹ã®è±å¯ãªã»ããã§ãã
ã³ã¬ã¯ã·ã§ã³ã®æ©èœãæ¡åŒµããŠãæ°ããã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³ãããæšæºã³ã¬ã¯ã·ã§ã³ã§æ©èœããã¡ãœããã
å®éã«ã¯ãæšæºã®ã³ã¬ã¯ã·ã§ã³ã¯çœ®ãæããããŸããã
2ïŒ Apache Commons Collections-ãã®ã³ã¬ã¯ã·ã§ã³ã¯ãã°ã¢ãã«æãè¿ãã競åä»ç€Ÿãã§ãããå€ãã®
èå³æ·±ãã³ã¬ã¯ã·ã§ã³ãæšæºJavaã³ã¬ã¯ã·ã§ã³ãæäœããããã®ãŠãŒãã£ãªãã£ãããã³å€æ°ã®ã©ãããŒ
ã³ã¬ã¯ã·ã§ã³ã®åäœã®å€æŽã ããã«ãããã·ã³ãã«ãªã¡ã«ããºã ã§ãããã®å®è£ ãæäŸããŸãã
ãããç¹°ãè¿ããŸãã
3ïŒ Trove-ãã®ã³ã¬ã¯ã·ã§ã³ã®æ©èœã¯ãäž»ã«ããã©ãŒãã³ã¹ãšã¡ã¢ãªã®åæžã«ããããã
æšæºã³ã¬ã¯ã·ã§ã³ã®é«éãªå®è£ ïŒããã³å¿ èŠãªã¡ã¢ãªãå°ãªãïŒãšã³ã¬ã¯ã·ã§ã³ãæäŸããŸã
ããªããã£ãåã
4ïŒ GSã³ã¬ã¯ã·ã§ã³ -ãã®ã³ã¬ã¯ã·ã§ã³ã®ç¹åŸŽã¯ããœãŒããã¯ã©ã¹ãªã©ã®åŠçæ¹æ³ãçµã¿åãããããšã§ãã
ãŠãŒãã£ãªãã£ã¯ã©ã¹ã®éçã¡ãœããã䜿çšããããã®ä»£æ¿ãäœæããã³ã¬ã¯ã·ã§ã³ã ãã®ã©ã€ãã©ãªã¯ä»£æ¿åãæäŸããŸã
ã»ãšãã©ãã¹ãŠã®æšæºã³ã¬ã¯ã·ã§ã³ãšããã€ãã®æ°ããã³ã¬ã¯ã·ã§ã³ãè¿œå ãããŸãã
IIIã ç°ãªãã©ã€ãã©ãªã®ä»£æ¿ã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³
ããã§ã¯ãããŸããŸãªã©ã€ãã©ãªã§ã©ã®ãããªæ°ããèå³æ·±ãã³ã¬ã¯ã·ã§ã³ãèŠã€ããããç°¡åã«èããŠã¿ãŸãã
3.1ã°ã¢ãã®ä»£æ¿åéã¿ã€ã
å ¬åŒæ å ±ïŒ ããã¥ã¡ã³ã ã ãœãŒã¹ã³ãŒã ã javadoc
ãããžã§ã¯ããžã®æ¥ç¶æ¹æ³ïŒ
ã¡ã€ãŽã³ãã°ã©ãã«
ã¡ã€ãŽã³
ã°ã©ãã«
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version> </dependency>
ã°ã©ãã«
dependencies { compile 'com.google.guava:guava:18.0' }
Googleã¯ãæ¢åã®ã³ã¬ã¯ã·ã§ã³ã«ããã€ãã®èå³æ·±ãè¿œå æ©èœãéçºããŸããããããã®æ©èœã¯ãã§ããã°éåžžã«äŸ¿å©ã§ãã
ãããžã§ã¯ãã§guavaã©ã€ãã©ãªã䜿çšããŸãã ãããã®ã³ã¬ã¯ã·ã§ã³ã¯ãé·ãéäºå®äžã®æšæºã«ãªã£ãŠãããšèšããŸãã
ã»ãšãã©ã®Javaãããžã§ã¯ãã§ã¯ãçµéšè±å¯ãªéçºè ã«ãšã£ãŠã¯ãäœããã®çç±ã§ãããžã§ã¯ããç¥ãããšãéèŠã§ãã
çç±ã¯åœŒãã®ãããžã§ã¯ãã§ãããã䜿çšããããšã¯ã§ããŸãããå€ãã®å Žåãã€ã³ã¿ãã¥ãŒã§ã°ã¢ãã«ã€ããŠã®è³ªåãèãããšãã§ããŸã
ã³ã¬ã¯ã·ã§ã³ã
ããããããã«è©³ããèŠãŠã¿ãŸãããã ãŸããã°ã¢ãã®ã¡ã€ã³ã³ã¬ã¯ã·ã§ã³ãšã¯ã©ã¹ã°ã«ãŒãã®ã€ã³ã¿ãŒãã§ã€ã¹ãèŠãŠã¿ãŸãããã
泚æ ïŒããŒãã«ãå šäœã«åãŸããªãå Žåã¯ãããŒãžããºãŒã ã¢ãŠãããããå¥ã®ãã©ãŠã¶ãŒã§éããŠã¿ãŠãã ããã
åœ¹è· | 説æ | å®è£ äŸ | 䜿çšäŸ |
---|---|---|---|
ImmutableCollection
ImmutableList ImmutableSet ...ãªã© | æšæºã®Javaã³ã¬ã¯ã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã«ã¯ãåŒã³åºãã«ãã£ãŠã³ã¬ã¯ã·ã§ã³ãäžå€ã«ããæ©èœããããŸãã
Collections.unmodifiableCollectionïŒunmodifiableListãŸãã¯unmodifiableMapïŒãããããã®ã¢ãããŒãã¯æã äžå€ã®ã³ã¬ã¯ã·ã§ã³ã«å¥ã®åã䜿çšãããšãããã確å®ã«ã§ãããããæé© ã³ã¬ã¯ã·ã§ã³ãå€æŽããããšãããšãã©ã³ã¿ã€ã ãšã©ãŒã®ä»£ããã«ã³ã¬ã¯ã·ã§ã³ã¯æ¬åœã«äžå€ã§ãã ãããžã§ã¯ãã®ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããŸããããã«ãæšæºã®Javaã³ã¬ã¯ã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã§ã¯äžå€ã§ã ã³ã¬ã¯ã·ã§ã³ã¯ããã«ãã¹ã¬ããèªã¿åããªã©ã®åæããµããŒããããªãœãŒã¹ãäŸç¶ãšããŠäœ¿çšããŠããŸãã ImmutableCollection guavaã¯ãããããäžå€ã§ãããæé©åãããŠããããšããèªèãããŠããŸã ãããäžããããã | JDKïŒ ImmutableCollection ã
ImmutableList ã ImmutableSet ã ImmutableSortedSet ã ImmutableMap ã ImmutableSortedMap ã°ã¢ãïŒ ImmutableMultiset ã ImmutableSortedMultiset ã ImmutableMultimap ã ImmutableListMultimap ã ImmutableSetMultimap ã ImmutableBiMap ã ImmutableClassToInstanceMap ã ImmutableTable | -publicã¡ãœããããä»ã®ã¯ã©ã¹ãå€æŽãããªãããšãä¿èšŒãããŠããã³ã¬ã¯ã·ã§ã³ãè¿ãå Žåã
-ã³ã¬ã¯ã·ã§ã³ã®å€ãåã³å€æŽãããããšããªãããšãããã£ãŠããå Žå |
ãã«ãã»ãã
| ã³ã¬ã¯ã·ã§ã³ã¯Setã«äŒŒãŠããŸãããèŠçŽ ãžã®è¿œå ã®æ°ãããã«ã«ãŠã³ãã§ããŸãã ãšãŠã
ç¹å®ã®èŠçŽ ãç¹å®ã®ã»ããã«å«ãŸããŠãããã©ããã ãã§ãªãã ãã®æ°ãæ°ããïŒæãç°¡åãªäŸã¯ãç¹å®ã®åèªã®èšåã®æ°ãæ°ããããšã§ã ä»»æã®ããã¹ãïŒã ã€ãŸãããã®ã³ã¬ã¯ã·ã§ã³ã¯Map <TãInteger>ã³ã¬ã¯ã·ã§ã³ã®ãã䟿å©ãªããŒãžã§ã³ã§ããããã®ãããªã³ã¬ã¯ã·ã§ã³çšã«ç¹å¥ã«èšèšãããã¡ãœããã«ããã ãã®ãããªå Žåã«ã¯äœåãªã³ãŒãã®éãæžãããŠãã ããã | HashMultiset ã
TreeMultiset ã LinkedHashMultiset ã ConcurrentHashMultiset ã ImmutableMultiset 䞊ã¹æ¿ã | -ããã¹ãå
ã®åèªã®åºçŸåæ°ã®ã«ãŠã³ã
-ããã¹ãå ã®æåæ°ãæ°ãã -ãªããžã§ã¯ãã®æ°ãæ°ãã |
ãã«ãããã
| ã»ãšãã©ã®çµéšè±å¯ãªJavaéçºè
ã¯ãMap <KãList <V >>ãŸãã¯Map <KãSet <V >>ãªã©ã®æ§é ã䜿çšããå¿
èŠã«çŽé¢ããŸããããäœæ¥ãç°¡çŽ åããããã«å€ãã®è¿œå ã³ãŒããäœæããå¿
èŠããããŸããããMultimapã¯guavaã©ã€ãã©ãªã«å°å
¥ããã次ã®å Žåã«ç°¡åã«äœæ¥ã§ããã³ã¬ã¯ã·ã§ã³ããããŸã
1ã€ã®ããŒãšããã®ããŒã®å€ãã®å€ã Map <KãSet <V >>ã®ãããªæ§é ãšã¯ç°ãªããMultimapã¯ãã³ãŒãã®åæžãšã¢ã«ãŽãªãºã ã®ç°¡çŽ åã®ããã®äŸ¿å©ãªæ©èœãå€æ°æäŸããŸãã | ArrayListMultimap ã
HashMultimap ã LinkedListMultimap ã LinkedHashMultimap ã TreeMultimap ã ImmutableListMultimap ã ImmutableSetMultimap | -次ã®ãããª1察å€ã®é¢ä¿ã®å®è£
æåž«-åŠç éšé-åŽåè ããŒã-éšäž |
ãã€ããã
| å€ãã®å Žåãäž¡æ¹åã§æ©èœããããããäœæãããå ŽåããããŸãã
ããŒãšæå³ãå Žæãå€æŽã§ããå ŽåïŒããšãã°ããã·ã¢èª-è±èªèŸæžãããå Žå ãã·ã¢èªã§åä¿¡ããå¿ èŠããããŸã-è±èªãå¥ã®éã«è±èª-ãã·ã¢èªïŒã éåžžãã ããã¯ã2ã€ã®ããããäœæããããšã§è§£æ±ºãããŸãã1ã€ã«ã¯key1-key2ããã1ã€ã«ã¯key2-key1ïŒã BiMapã§ã¯ 1ã€ã®ã³ã¬ã¯ã·ã§ã³ã ãã§ãã®åé¡ã解決ããŸãã ããã«ãåé¡ãšãšã©ãŒãæé€ããŸãã 2ã€ã®ã³ã¬ã¯ã·ã§ã³ã䜿çšããå Žåã®åæã | HashBiMap ã
ImmutableBiMap ã EnumBiMap ã EnumHashBiMap | -ããèšèªããå¥ã®èšèªãžããŸãã¯ãã®éã®ç¿»èš³çšã®èŸæžã
-åæ¹åã®ããŒã¿å€æã |
ããŒãã«
| ãã®ã³ã¬ã¯ã·ã§ã³ã¯ãMap <FirstNameãMap <LastNameãPerson >>ããšãã圢åŒã®ã³ã¬ã¯ã·ã§ã³ã眮ãæããŸãã
䜿çšããã«ã¯äžäŸ¿ã§ãã | HashBasedTable ã
TreeBasedTable ã ImmutableTable ã ArrayTable | -ããšãã°ãExcelã®ãããªããŒãã«
-å€æ°ã®åãæã€è€éãªããŒã¿æ§é ã |
ClassToInstanceMap
| æã
ãMap'eã«ããŒå€ã§ã¯ãªãããã®ã¿ã€ãã®ã¿ã€ãå€ãä¿åããå¿
èŠããããŸãããã®ç®çã®ããã«ã
ã³ã¬ã¯ã·ã§ã³ã ã€ãŸããæè¡çã«ã¯Mapã®ãã䟿å©ã§å®å šãªé¡äŒŒç©ã§ãã <ã¯ã©ã¹ <ïŒ B>ãB>ãæ¡åŒµ | MutableClassToInstanceMap ã
ImmutableClassToInstanceMap ã | |
ã¬ã³ãžã»ãã
| æ°å€ã®ç°ãªãéããã»ã°ã¡ã³ããšéããã»ã°ã¡ã³ããæ ŒçŽããã³ã¬ã¯ã·ã§ã³ãã»ã°ã¡ã³ãã¯
äºãã«å£çµããŸãã | ImmutableRangeSet ã
TreeRangeSet | 幟äœåŠçã»ã°ã¡ã³ã
æé |
ã¬ã³ãžããã
| RangeSetã«äŒŒãã³ã¬ã¯ã·ã§ã³ã§ãããã»ã°ã¡ã³ããäºãã«çµåãããããšã¯ãããŸããã | ImmutableRangeMap ã
TreeRangeMap | 幟äœåŠçã»ã°ã¡ã³ã
æé |
LoadingCache
| ConcurrentMapã«äŒŒãã³ã¬ã¯ã·ã§ã³ã§ãããåæã«ãããããä¿åããæéãæå®ã§ããŸã
ã¢ã€ãã ã ãã£ãã·ã¥ãæŽçããããã®éåžžã«äŸ¿å©ãªã³ã¬ã¯ã·ã§ã³ã§ãäžæ£ãªãã¹ã¯ãŒããšã³ããªã®æ°ãã«ãŠã³ãããŸã äžå®æéãªã© ã¿ã¹ã¯ | ForwardingLoadingCache ã
ForwardingLoadingCache.SimpleForwardingLoadingCache | ãã£ãã·ã¥
誀ã£ãä¿ç®¡ ãã¹ã¯ãŒãã®è©Šè¡ ãªã© |
3.2 Apache Commonsã³ã¬ã¯ã·ã§ã³ããã®æ°ããã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³
å ¬åŒæ å ± ïŒ ããã¥ã¡ã³ã ã ãœãŒã¹ã³ãŒã ã ãŠãŒã¶ãŒããã¥ã¡ã³ã ã javadoc
ãããžã§ã¯ããžã®æ¥ç¶æ¹æ³ïŒ
ã¡ã€ãŽã³ãã°ã©ãã«ãã¢ã€ããŒ
ã¡ã€ãŽã³
ã°ã©ãã«
ãã¿
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.0</version> </dependency>
ã°ã©ãã«
'org.apache.commons:commons-collections4:4.0'
ãã¿
<dependency org="org.apache.commons" name="commons-collections4" rev="4.0"/>
泚æ ïŒããŒãã«ãå šäœã«åãŸããªãå Žåã¯ãããŒãžããºãŒã ã¢ãŠãããããå¥ã®ãã©ãŠã¶ãŒã§éããŠã¿ãŠãã ããã
åœ¹è· | 説æ | å®è£ äŸ | 䜿çšäŸ |
---|---|---|---|
å€æŽäžå¯
| Immutable guavaã¯ã©ã¹ã«äŒŒãã€ã³ã¿ãŒãã§ãŒã¹ | UnmodifiableBag ã
UnmodifiableBidiMap ã UnmodifiableCollection ã UnmodifiableList ã å€æŽäžå¯èœãªããã ãªã© | ãã¹ãŠã®å Žåã«ãããŠãå€æŽãããŠããªãã³ã¬ã¯ã·ã§ã³ãäœæããå¿ èŠãããå Žå |
Iterablemap
| Mapã€ã³ã¿ãŒãã§ãŒã¹ã«é¡äŒŒããŠããŸããããšã³ããªã»ãããäœæããã«MapãçŽæ¥å埩åŠçã§ããŸãã 䜿çšãããŠãã
ãã®ã©ã€ãã©ãªã®ã»ãŒãã¹ãŠã®Mapå®è£ ã§ã | HashedMap ã
LinkedMap ListOrderedMap ãã®ä»å€æ° | éåžžã®å°å³ãšåã |
OrderedMap
| è¿œå é ã«ããããäœæã§ããŸããã䞊ã¹æ¿ãã¯äœ¿çšã§ããŸãã | LinkedMap
ListOrderedMap | éåžžãåå¥ã«ãªã¹ãããã³åå¥ã«äœ¿çšãããå Žå |
ããã£ããã
| Guavaã®BiMapã®é¡äŒŒç©ãã€ãŸããããŒããšã«å€ãååŸããæ©èœãããã³å€ããšã«ããŒãååŸããæ©èœ | TreeBidiMap ã
DualHashBidiMap ã DualLinkedHashBidiMap ã DualTreeBidiMap ãªã© | äž¡åŽã§å®è¡ãã1察1ã®å€æ |
ããã°
| Guavaã®Multisetã®é¡äŒŒç©ãã€ãŸããåã¿ã€ãã®èŠçŽ ã®æ°ãä¿åããæ©èœ | CollectionBag ã
ããã·ã¥ããã° SynchronizedBag ã ããªãŒããã° ãã®ä» | ãªããžã§ã¯ãã®æ°ãæ°ãã |
BoundedCollection ã
å¢çããã | äžã®ãµã€ãºã«å¶éãããåçã³ã¬ã¯ã·ã§ã³ãäœæã§ããŸã | CircularFifoQueue ã
FixedSizeList ã FixedSizeMap ã ã©ã | ã³ã¬ã¯ã·ã§ã³ãç¹å®ã®éãè¶
ããŠã¯ãªããªãããšã確å®ã«ããã£ãŠããå Žå
èŠçŽ |
ãã«ãããã
| Guavaã®Multimapã¢ããã°ãã€ãŸãã1ã€ã®ããŒã«å¯ŸããŠå€ãã®èŠçŽ ãä¿åããæ©èœ | MultiValueMap | é¢é£ãæã€ã³ã¬ã¯ã·ã§ã³ã®å Žåã1ã€ã®ããŒ-å€ãã®å€ |
ãã©ã€
| é åºä»ããããããªãŒãäœæããã³ä¿åããããã®ã³ã¬ã¯ã·ã§ã³ | ãããªã·ã¢ããªãŒ | æšãäœã |
ããªãŒãªã¹ã
| ãªã¹ãã®äžå€®ã«èŠçŽ ãæ¿å ¥ããå Žåã¯ãArrayListãšLinkedListã眮ãæããŸããããŒã¿ã¯ãã®ãªã¹ãã®ããªãŒã«æ ŒçŽãããŠãããããã€ã³ããã¯ã¹ã«ãã£ãŠããŒã¿ãæ¯èŒçè¿ éã«åä¿¡ã§ããäžæ¹ããªã¹ãã®äžå€®ã«ããŒã¿ããã°ããæ¿å ¥ã§ããŸãã | ããªãŒãªã¹ã | LinkedListããªã¹ãã®äžå€®ã§é »ç¹ã«è¿œå /ã¹ãã¬ã¹ã«çœ®ãæãã |
3.3 Troveã³ã¬ã¯ã·ã§ã³
代æ¿ã³ã¬ã¯ã·ã§ã³ã®ä»ã®ã©ã€ãã©ãªãšã¯ç°ãªããTroveã¯æ°ããç¬èªã®ãã¥ãŒãæäŸããŸããã
ã³ã¬ã¯ã·ã§ã³ããæ¢åã®æé©åãæäŸããŸãïŒ
ãŸãããåãã®ããã«ãããªããã£ãJavaåã¯æšæºã³ã¬ã¯ã·ã§ã³ã«è¿œå ã§ãããã©ãããŒã®ã¿ãè¿œå ãããŸããããã¯åçã§ã
å æã¡ã¢ãªãå¢å ããã³ã¬ã¯ã·ã§ã³ã®ããã©ãŒãã³ã¹ããããã«äœäžããŸãã Troveã¯ã³ã¬ã¯ã·ã§ã³ã®ã³ã¬ã¯ã·ã§ã³ãæäŸãã
ããªããã£ãåãå«ãããŒãšå€ã
第äºã«ãæšæºã³ã¬ã¯ã·ã§ã³ã¯ã¡ã¢ãªæ¶è²»ã«æé©ãªæ¹æ³ã§å®è£ ãããªãããšããããããŸããããšãã°ãåHashMapèŠçŽ ã¯åå¥ã®ãªããžã§ã¯ãã«æ ŒçŽãããHashSetã¯ããŒã®ä»£ããã«åœã®ãªããžã§ã¯ããæ ŒçŽããHashMapã§ãã Troveã¯ãé åãšãªãŒãã³ã¢ãã¬ãã·ã³ã°ã«åºã¥ããŠãã®ãããªã³ã¬ã¯ã·ã§ã³ã®å®è£ ãæäŸããŸããããã«ãããå¿ èŠãªã¡ã¢ãªãå€§å¹ ã«åæžãããå Žåã«ãã£ãŠã¯ããã©ãŒãã³ã¹ãåäžããŸãã
æŽæ°ïŒã³ã¡ã³ãã§ã¯ããã¹ãŠã®ç¹ïŒãã°ã®æ°ãã€ã³ã¿ãŒãã§ã€ã¹ã®å®å šãªã«ãã¬ããžãããã©ãŒãã³ã¹ããµããŒãã¢ã¯ãã£ããã£ãªã©ïŒã§fastutilãŸãã¯GSã«å£ãã®ã§ãæ°ãããããžã§ã¯ãã§Troveã䜿çšããããšã¯æªããšèšäºã¯ç€ºåããŠããŸãã æ®å¿µãªãããçŸåšTroveãšfastutilããã³GSã®å®å šãªåæ/æ¯èŒãè¡ãæ©äŒããªãããããã®æèŠã確èªããããšã¯ã§ããŸããã代æ¿ã³ã¬ã¯ã·ã§ã³ã®ã©ã€ãã©ãªãéžæããéã«æ€èšããŠãã ããã
å ¬åŒæ å ±ïŒ ããã¥ã¡ã³ã ã ãœãŒã¹ã³ãŒã ã javadoc
ãããžã§ã¯ããžã®æ¥ç¶æ¹æ³ïŒ
ã¡ã€ãŽã³ãã°ã©ãã«ãã¢ã€ããŒ
ã¡ã€ãŽã³
ã°ã©ãã«
ãã¿
<dependency> <groupId>net.sf.trove4j</groupId> <artifactId>trove4j</artifactId> <version>3.0.3</version> </dependency>
ã°ã©ãã«
'net.sf.trove4j:trove4j:3.0.3'
ãã¿
<dependency org="net.sf.trove4j" name="trove4j" rev="3.0.3"/>
åœ¹è· | JDKã¢ããã° | 説æ |
---|---|---|
THashMap | ããã·ã¥ããã | ã ãªãŒãã³ã¢ãã¬ã¹æå® ãã¢ã«ãŽãªãºã ãåããããã·ã¥ããŒãã«ã䜿çšããŠè¡çªã解決ããMapã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ïŒ é£éæ¹æ³ã䜿çšãããHashMapãšã¯ç°ãªããŸã ïŒã ããã«ãããã¡ã¢ãªã倧å¹
ã«ç¯çŽããå Žåã«ãã£ãŠã¯ããã©ãŒãã³ã¹ãåäžãããªãããNodeã¯ã©ã¹ã®ãªããžã§ã¯ããä¿åãŸãã¯äœæããªãããšãã§ããŸãã
|
ã¿ãã·ã¥ã»ãã | ããã·ã¥ã»ãã | è¡çªã解決ããããã«ã ãªãŒãã³ã¢ãã¬ãã·ã³ã° ãã¢ã«ãŽãªãºã ãåããããã·ã¥ããŒãã«ã䜿çšããSetã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ |
TLinkedHashSet | LinkedHashSet | LinkedHashSetã«äŒŒãŠããŸãããã ãªãŒãã³ã¢ãã¬ã¹æå® ãã¢ã«ãŽãªãºã ã§ããã·ã¥ããŒãã«ã䜿çšããŸã |
TLinkedList | LinkedList | ãã ãããªã³ã¯ãªã¹ãã®ããå¹ççãªé¡äŒŒç©ã§ãããããŒã¿ã«ããã€ãã®å¶éã課ããŠããŸãã |
TByteArrayList ã
TIntArrayListãªã© | é åãªã¹ã | ããªããã£ããªæ°å€ãçŽæ¥ä¿åããArrayListã®é¡äŒŒç©ã§ãã¡ã¢ãªã³ã¹ããå€§å¹ ã«åæžããåŠçãé«éåããŸãã 7ã€ã®ãã¹ãŠã®ããªããã£ãæ°å€åã®ã³ã¬ã¯ã·ã§ã³ããããååãã³ãã¬ãŒãã¯T [Type] ArrayListã§ã |
TCharLinkedList ã
TFloatLinkedListãªã© | LinkedList | 7ã€ã®ããªããã£ãæ°å€åãåœåãã¿ãŒã³T [Type] LinkedListãæ ŒçŽããLinkedListã®é¡äŒŒç© |
TByteArrayStack ã
TLongArrayStack | é å | ããªããã£ããªæ°å€åãæ ŒçŽããããã®ã¹ã¿ãã¯å®è£ ãåœåãã¿ãŒã³T [Type] LinkedList |
TIntQueue ã
TCharQueue | é å | ããªããã£ããªæ°å€åãä¿åããããã®ãã¥ãŒã®å®è£ ãåœåãã¿ãŒã³T [Type] Queue |
TShortHashSet ã
TDoubleHashSet | ããã·ã¥ã»ãã | ããªããã£ãåãä¿åããããã®Setã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ã ãªãŒãã³ã¢ãã¬ãã·ã³ã°ã¢ã«ãŽãªãºã ãååãã³ãã¬ãŒãT [Type] HashSet |
TLongLongHashMap ã
TFloatObjectHashMap ã TShortObjectHashMapãªã© | ããã·ã¥ããã | ãªãŒãã³ã¢ãã¬ã¹æå®ã¢ã«ãŽãªãºã ãåœåãã¿ãŒã³T [Type] [Type] HashMapã®ããªããã£ãåãæ ŒçŽããããã®Mapã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ã |
3.4 GSã³ã¬ã¯ã·ã§ã³ã®ã³ã¬ã¯ã·ã§ã³
ãã®ã©ã€ãã©ãªã®äž»ãªæ©èœã¯ãã³ã¬ã¯ã·ã§ã³ã®åŠçïŒäžŠã¹æ¿ããæ€çŽ¢ïŒã®ã¡ãœãããã³ã¬ã¯ã·ã§ã³ã¯ã©ã¹èªäœã«è¿œå ããããCollections.sortãªã©ã䜿çšãããããšã¯éè«ççã§èŠèŠããããšã§ãã ãããã£ãŠãGSã³ã¬ã¯ã·ã§ã³ã¯ããã¹ãŠã®åŠçãæ€çŽ¢ãããã³ãœãŒãã®ã¡ãœãããæ ŒçŽããããªããã³ã¬ã¯ã·ã§ã³ãã®ã¢ã€ãã¢ãææ¡ããŸãããã€ãŸããCollections.sortïŒãªã¹ãïŒã®ä»£ããã«ãlist.sortã®ã¿ãåŒã³åºãããŸãã ãã®ãããã©ã€ãã©ãªã¯ãæšæºã³ã¬ã¯ã·ã§ã³ã®é¡äŒŒç©ã«å ããŠãããã€ãã®æ°ããã³ã¬ã¯ã·ã§ã³ãæäŸããŠããŸãã
å ¬åŒæ å ± ïŒ ããã¥ã¡ã³ã ã ãœãŒã¹ã³ãŒã ã ãŠãŒã¶ãŒããã¥ã¡ã³ã ã javadoc
ãããžã§ã¯ããžã®æ¥ç¶æ¹æ³ïŒ
ã¡ã€ãŽã³ãã°ã©ãã«ãã¢ã€ããŒ
ã¡ã€ãŽã³
ãã¿
<dependency> <groupId>com.goldmansachs</groupId> <artifactId>gs-collections-api</artifactId> <version>6.2.0</version> </dependency> <dependency> <groupId>com.goldmansachs</groupId> <artifactId>gs-collections</artifactId> <version>6.2.0</version> </dependency> <dependency> <groupId>com.goldmansachs</groupId> <artifactId>gs-collections-testutils</artifactId> <version>6.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>com.goldmansachs</groupId> <artifactId>gs-collections-forkjoin</artifactId> <version>6.2.0</version> </dependency>
ã°ã©ãã«
compile 'com.goldmansachs:gs-collections-api:6.2.0' compile 'com.goldmansachs:gs-collections:6.2.0' testCompile 'com.goldmansachs:gs-collections-testutils:6.2.0' compile 'com.goldmansachs:gs-collections-forkjoin:6.2.0'
ãã¿
<dependency org="com.goldmansachs" name="gs-collections-api" rev="6.2.0" /> <dependency org="com.goldmansachs" name="gs-collections" rev="6.2.0" /> <dependency org="com.goldmansachs" name="gs-collections-testutils" rev="6.2.0" /> <dependency org="com.goldmansachs" name="gs-collections-forkjoin" rev="6.2.0"/>
åœ¹è· | JDKã¢ããã° | 説æ |
---|---|---|
ãã¡ã¹ããªã¹ã | é åãªã¹ã | ãœãŒããéžæãªã©ã®æ©èœã䜿çšã§ããArrayListã®é¡äŒŒç©ã ã³ã¬ã¯ã·ã§ã³ãªããžã§ã¯ã㧠|
çµ±äžã»ãã | ããã·ã¥ã»ãã | HashSetã¢ããã°ã FastListãåç § |
TreeSortedSet | ããªãŒã»ãã | ã¢ããã°ããªãŒã»ããã FastListãåç § |
çµ±åããã | ããã·ã¥ããã | HashMapã«é¡äŒŒããŠããŸãã FastListãåç § |
TreeSortedMap | ããªãŒããã | ã¢ããã°ããªãŒãããã FastListãåç § |
HashBiMap | - | BiMapã®å®è£ ãã°ã¢ããåç § |
ããã·ã¥ããã° | - | ãã«ãã»ããå®è£ ãã°ã¢ããåç § |
ããªãŒããã° | - | ãœãŒããããBiMapã®å®è£ ãã°ã¢ããåç § |
ã¢ã¬ã€ã¹ã¿ã㯠| é å | Stack JDKã¯ã©ã¹ãšåæ§ã«ããåŸå ¥ãå åºããã®é åºã§ã¹ã¿ãã¯ãå®è£ ããŸã |
FastListMultimap | - | ãã«ããããã®å®è£ ãã°ã¢ããåç § |
IntArrayList ã
FloatHashSet ã ArrayStack ããã·ã¥ããã° ByteIntHashMap | - | ããªããã£ããªããŸããŸãªã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³ãåœåã®ååã¯troveã®ãããšåãã§ãããJDKã®é¡äŒŒç©ã«å ããŠãStackãBagã³ã¬ã¯ã·ã§ã³ã®é¡äŒŒç©ããããŸã |
3.5 Fastutilã³ã¬ã¯ã·ã§ã³
ããªããã£ãåã®ã³ã¬ã¯ã·ã§ã³ãæ±ãããã®ãã®ã©ã€ãã©ãªãéåžžã«ç°¡åã«èŠãŠã¿ãŸãããã
詳现ã¯ã ããã¥ã¡ã³ã ã ãœãŒã¹ã³ãŒã ã javadocãåç §ããŠãã ããã
åœ¹è· | 説æ |
---|---|
Byte2DoubleOpenHashMapã
IntArrayListã IntArrayPriorityQueue ãªã© | ããŸããŸãªããªããã£ãåã®ã³ã¬ã¯ã·ã§ã³ãåœååå[Type] ArrayListã[Type] ArrayPriorityQueueãªã©ã ãªã¹ããŸãã¯ã»ãããããã³[KeyType] 2 [ValueType] OpenHashMapãªã©ã ãããçšã |
IntBigListã
DoubleOpenHashBigSetãªã© | éåžžã«å€§ããªãµã€ãºã®ããŸããŸãªããªããã£ãã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³ããããã®ã³ã¬ã¯ã·ã§ã³ã§ã¯ãintã§ã¯ãªãé·ãèŠçŽ ã䜿çšã§ããŸãã å éšã§ã¯ãããŒã¿ã¯éåžžé åã®é åãšããŠä¿åãããŸãã ããã©ãŒãã³ã¹ã®æ倱ã¯çŽ30ïŒ ã«éããå¯èœæ§ããããããéåžžã®ã³ã¬ã¯ã·ã§ã³ã§ååãªå Žåã¯ãã®ãããªã³ã¬ã¯ã·ã§ã³ã䜿çšããããšã¯ãå§ãããŸãããããã®ãããªã³ã¬ã¯ã·ã§ã³ã䜿çšãããšã倧éã®ããŒã¿ãæäœã§ããŸã |
3.6ä»ã®ã³ã¬ã¯ã·ã§ã³ã©ã€ãã©ãªãšããªããã£ãã³ã¬ã¯ã·ã§ã³ã®ããã©ãŒãã³ã¹ã«ã€ããŠå°ã
TroveãšFastutilã«å ããŠãããªããã£ãåã®ã³ã¬ã¯ã·ã§ã³ãšæšæºã³ã¬ã¯ã·ã§ã³ã®é«éã¢ããã°ãå®è£ ããããã€ãã®æåãªã©ã€ãã©ãªããããŸãã
1ïŒ HPPC -Javaçšã®é«æ§èœããªããã£ãã³ã¬ã¯ã·ã§ã³ã¯ãJDKã®ã³ã¬ã¯ã·ã§ã³ã«é¡äŒŒããããªããã£ãã³ã¬ã¯ã·ã§ã³ãæäŸããŸãã
2ïŒ Koloboke ïŒHFTCã®å¥åïŒ-ååã瀺ãããã«ããã®ããªããã£ãåã®ã©ã€ãã©ãªã¯ã OpenHFTãããžã§ã¯ãã®äžç°ãšããŠãã·ã¢ã®ããã°ã©ããŒïŒRoman LeventovïŒã«ãã£ãŠéçºãããŸããã ãã®ã©ã€ãã©ãªã¯ãé«æ§èœãªããªããã£ãã³ã¬ã¯ã·ã§ã³ã®å®è£ ã«ã圹ç«ã¡ãŸãã
ããŸããŸãªã©ã€ãã©ãªã®ããã©ãŒãã³ã¹ãæ¯èŒããããšãèå³æ·±ãå Žåã¯ããã®èšäºãåç §ããããšããå§ãããŸããç¹å®ã®æ¡ä»¶ã§ãã¹ããããã®ã¯HashMapã³ã¬ã¯ã·ã§ã³ã®ã¿ã§ããããšãèæ ®ããå¿ èŠããããŸãã ããã«ãå æã¡ã¢ãªãèæ ®ããã«äœæ¥é床ã®ã¿ã枬å®ããŸããïŒããšãã°ãHashMap jdkã¯troveã®ã¢ããã°ãããã¯ããã«å€ãã®ã¡ã¢ãªã䜿çšã§ããŸãïŒããŸããã¡ã¢ãªã¯ããã©ãŒãã³ã¹ãããããã«éèŠã«ãªãå ŽåããããŸãã
æŽæ°ïŒã³ã¡ã³ãã§ã¯ããã¹ãŠã®ç¹ïŒãã°ã®æ°ãã€ã³ã¿ãŒãã§ã€ã¹ã®å®å šãªã«ãã¬ããžãããã©ãŒãã³ã¹ããµããŒãã¢ã¯ãã£ããã£ãªã©ïŒã§fastutilãŸãã¯GSã«å£ãã®ã§ãæ°ãããããžã§ã¯ãã§Troveã䜿çšããããšã¯æªããšèšäºã¯ç€ºåããŠããŸãã æ®å¿µãªãããçŸåšTroveãšfastutilããã³GSã®å®å šãªåæ/æ¯èŒãè¡ãæ©äŒããªãããããã®æèŠã確èªããããšã¯ã§ããŸããã代æ¿ã³ã¬ã¯ã·ã§ã³ã®ã©ã€ãã©ãªãéžæããéã«æ€èšããŠãã ããã
IVã ããŸããŸãªã©ã€ãã©ãªã§æã人æ°ã®ãã代æ¿ã³ã¬ã¯ã·ã§ã³ã®å®è£ ã®æ¯èŒ
4.1ã°ã¢ããApache Commons CollectionsãGSã©ã€ãã©ãªã§ã®ãã«ãã»ããïŒMultiSet / BagïŒã®å®è£
ã³ã¬ã¯ã·ã§ã³
ãããã£ãŠããã«ãã»ããã¯ãã»ããå ã®èŠçŽ ã®ååšã ãã§ãªããæ°ãä¿æããã»ããã§ã
ãã®äžã®çºçã JDKã§ã¯ãMapã³ã³ã¹ãã©ã¯ãã§ãšãã¥ã¬ãŒãã§ããŸã
<TãInteger>ããããèªç¶ã«ç¹æ®åãããã³ã¬ã¯ã·ã§ã³ã䜿çšãããšã䜿çšããã³ãŒããå€§å¹ ã«æžããããšãã§ããŸãã æ¯èŒãã
ãã®ã³ã¬ã¯ã·ã§ã³ã®ã©ã®å®è£ ãããŸããŸãªã©ã€ãã©ãªãæäŸããŠããŸããïŒ
泚æ ïŒããŒãã«ãå šäœã«åãŸããªãå Žåã¯ãããŒãžããºãŒã ã¢ãŠãããããå¥ã®ãã©ãŠã¶ãŒã§éããŠã¿ãŠãã ããã
ãã«ãã»ããïŒMultiSet / BagïŒã䜿çšããŠããã¹ãå ã®åèªãã«ãŠã³ãããäŸ
ã¿ã¹ã¯ããããŸã ïŒãHello WorldïŒ ã¿ãªããããã«ã¡ã¯ïŒ Hi WorldïŒãããããåå¥ã«è§£æããå¿ èŠããããŸã
åºåãèšå·ãã¹ããŒã¹ã®ã¿ã®åèªãã³ã¬ã¯ã·ã§ã³ã«ä¿åããããããã®åºçŸåæ°ã衚瀺ããŸã
åèªãããã¹ãå ã®åèªã®åèšæ°ãäžæã®åèªã®æ°ã
ã§ãããè¡ãæ¹æ³ãèŠãŠã¿ãŸããã
1.ç°ãªãGuisãã«ãã»ãããªãã·ã§ã³ïŒ
ã°ã¢ãã®HashMultisetã䜿çšããŠåèªãã«ãŠã³ããã
System.out.printlnïŒmultisetïŒããã³
System.out.printlnïŒmultiset.elementSetïŒïŒïŒ-ä»»æãã€ãŸãå®çŸ©ãããŠããŸããã
System.out.printlnïŒmultiset.elementSetïŒïŒïŒ-ä»»æãã€ãŸãå®çŸ©ãããŠããŸããã
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset Multiset<String> multiset = HashMultiset.create(Arrays.asList(INPUT_TEXT.split(" "))); // - System.out.println(multiset); // [Hi, Hello x 2, World! x 2, All!] - // System.out.println(multiset.elementSet()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + multiset.count("Hello")); // 2 System.out.println("World = " + multiset.count("World!")); // 2 System.out.println("All = " + multiset.count("All!")); // 1 System.out.println("Hi = " + multiset.count("Hi")); // 1 System.out.println("Empty = " + multiset.count("Empty")); // 0 // System.out.println(multiset.size()); // 6 // System.out.println(multiset.elementSet().size()); // 4
ã°ã¢ãã®TreeMultisetã䜿çšããŠåèªãã«ãŠã³ããã
System.out.printlnïŒmultisetïŒããã³
System.out.printlnïŒmultiset.elementSetïŒïŒïŒ-èªç¶ãã€ãŸãåèªã¯ã¢ã«ãã¡ãããé ã«ãœãŒããããŸãã
System.out.printlnïŒmultiset.elementSetïŒïŒïŒ-èªç¶ãã€ãŸãåèªã¯ã¢ã«ãã¡ãããé ã«ãœãŒããããŸãã
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset Multiset<String> multiset = TreeMultiset.create(Arrays.asList(INPUT_TEXT.split(" "))); // - System.out.println(multiset); // [All!, Hello x 2, Hi, World! x 2]- // System.out.println(multiset.elementSet()); // [All!, Hello, Hi, World!]- // System.out.println("Hello = " + multiset.count("Hello")); // 2 System.out.println("World = " + multiset.count("World!")); // 2 System.out.println("All = " + multiset.count("All!")); // 1 System.out.println("Hi = " + multiset.count("Hi")); // 1 System.out.println("Empty = " + multiset.count("Empty")); // 0 // System.out.println(multiset.size()); // 6 // System.out.println(multiset.elementSet().size()); // 4
LinkedHashMultisetTest guava
System.out.printlnïŒmultisetïŒããã³
System.out.printlnïŒmultiset.elementSetïŒïŒïŒã®åºåé åºã¯ãèŠçŽ ãæåã«è¿œå ãããé åºã§ããããšã«æ³šæããŠãã ããã
System.out.printlnïŒmultiset.elementSetïŒïŒïŒã®åºåé åºã¯ãèŠçŽ ãæåã«è¿œå ãããé åºã§ããããšã«æ³šæããŠãã ããã
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset Multiset<String> multiset = LinkedHashMultiset.create(Arrays.asList(INPUT_TEXT.split(" "))); // - System.out.println(multiset); // [Hello x 2, World! x 2, All!, Hi]- // System.out.println(multiset.elementSet()); // [Hello, World!, All!, Hi] - // System.out.println("Hello = " + multiset.count("Hello")); // 2 System.out.println("World = " + multiset.count("World!")); // 2 System.out.println("All = " + multiset.count("All!")); // 1 System.out.println("Hi = " + multiset.count("Hi")); // 1 System.out.println("Empty = " + multiset.count("Empty")); // 0 // System.out.println(multiset.size()); // 6 // System.out.println(multiset.elementSet().size()); // 4
ConcurrentHashMultiset guava
, System.out.println(multiset)
System.out.println(multiset.elementSet()) â , ,
HashMultiset
System.out.println(multiset.elementSet()) â , ,
HashMultiset
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset Multiset<String> multiset = ConcurrentHashMultiset.create(Arrays.asList(INPUT_TEXT.split(" "))); // - System.out.println(multiset); // [Hi, Hello x 2, World! x 2, All!] - // System.out.println(multiset.elementSet()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + multiset.count("Hello")); // 2 System.out.println("World = " + multiset.count("World!")); // 2 System.out.println("All = " + multiset.count("All!")); // 1 System.out.println("Hi = " + multiset.count("Hi")); // 1 System.out.println("Empty = " + multiset.count("Empty")); // 0 // System.out.println(multiset.size()); // 6 // System.out.println(multiset.elementSet().size()); // 4
2. Bag Apache Commons Collections:
HashBag Apache Commons Collections
, System.out.println(multiset)
System.out.println(multiset.elementSet()) â , .
System.out.println(multiset.elementSet()) â , .
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset Bag bag = new HashBag(Arrays.asList(INPUT_TEXT.split(" "))); // - System.out.println(bag); // [1:Hi,2:Hello,2:World!,1:All!] - // System.out.println(bag.uniqueSet()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + bag.getCount("Hello")); // 2 System.out.println("World = " + bag.getCount("World!")); // 2 System.out.println("All = " + bag.getCount("All!")); // 1 System.out.println("Hi = " + bag.getCount("Hi")); // 1 System.out.println("Empty = " + bag.getCount("Empty")); // 0 // System.out.println(bag.size()); // 6 // System.out.println(bag.uniqueSet().size()); // 4
TreeBag Apache Commons Collections
, System.out.println(multiset)
System.out.println(multiset.elementSet()) â , .
System.out.println(multiset.elementSet()) â , .
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset Bag bag = new TreeBag(Arrays.asList(INPUT_TEXT.split(" "))); // - System.out.println(bag); // [1:All!,2:Hello,1:Hi,2:World!]- // System.out.println(bag.uniqueSet()); // [All!, Hello, Hi, World!]- // System.out.println("Hello = " + bag.getCount("Hello")); // 2 System.out.println("World = " + bag.getCount("World!")); // 2 System.out.println("All = " + bag.getCount("All!")); // 1 System.out.println("Hi = " + bag.getCount("Hi")); // 1 System.out.println("Empty = " + bag.getCount("Empty")); // 0 // System.out.println(bag.size()); // 6 // System.out.println(bag.uniqueSet().size()); // 4
SynchronizedBag Apache Commons Collections
, System.out.println(multiset)
System.out.println(multiset.elementSet()) â , ,
HashBag
System.out.println(multiset.elementSet()) â , ,
HashBag
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset Bag bag = SynchronizedBag.synchronizedBag(new HashBag(Arrays.asList(INPUT_TEXT.split(" ")))); // - System.out.println(bag); // [1:Hi,2:Hello,2:World!,1:All!] - // System.out.println(bag.uniqueSet()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + bag.getCount("Hello")); // 2 System.out.println("World = " + bag.getCount("World!")); // 2 System.out.println("All = " + bag.getCount("All!")); // 1 System.out.println("Hi = " + bag.getCount("Hi")); // 1 System.out.println("Empty = " + bag.getCount("Empty")); // 0 // System.out.println(bag.size()); // 6 // System.out.println(bag.uniqueSet().size()); // 4
SynchronizedSortedBag Apache Commons Collections
, System.out.println(multiset)
System.out.println(multiset.elementSet()) â , ,
SortedBag
System.out.println(multiset.elementSet()) â , ,
SortedBag
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset Bag bag = SynchronizedSortedBag.synchronizedBag(new TreeBag(Arrays.asList(INPUT_TEXT.split(" ")))); // - System.out.println(bag); // [1:All!,2:Hello,1:Hi,2:World!]- // System.out.println(bag.uniqueSet()); // [All!, Hello, Hi, World!]- // System.out.println("Hello = " + bag.getCount("Hello")); // 2 System.out.println("World = " + bag.getCount("World!")); // 2 System.out.println("All = " + bag.getCount("All!")); // 1 System.out.println("Hi = " + bag.getCount("Hi")); // 1 System.out.println("Empty = " + bag.getCount("Empty")); // 0 // System.out.println(bag.size()); // 6 // System.out.println(bag.uniqueSet().size()); // 4
3. Bag GS Collections:
MutableBag GS Collections
, System.out.println(bag) System.out.println(bag.toSet()) â
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset MutableBag<String> bag = HashBag.newBag(Arrays.asList(INPUT_TEXT.split(" "))); // - System.out.println(bag); // [Hi, World!, World!, Hello, Hello, All!]- // System.out.println(bag.toSet()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + bag.occurrencesOf("Hello")); // 2 System.out.println("World = " + bag.occurrencesOf("World!")); // 2 System.out.println("All = " + bag.occurrencesOf("All!")); // 1 System.out.println("Hi = " + bag.occurrencesOf("Hi")); // 1 System.out.println("Empty = " + bag.occurrencesOf("Empty")); // 0 // System.out.println(bag.size()); // 6 // System.out.println(bag.toSet().size()); // 4
MutableSortedBag GS Collections
, System.out.println(bag) System.out.println(bag.toSortedSet()) â , ..
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Multiset MutableSortedBag<String> bag = TreeBag.newBag(Arrays.asList(INPUT_TEXT.split(" "))); // - System.out.println(bag); // [All!, Hello, Hello, Hi, World!, World!]- // System.out.println(bag.toSortedSet()); // [All!, Hello, Hi, World!]- // System.out.println("Hello = " + bag.occurrencesOf("Hello")); // 2 System.out.println("World = " + bag.occurrencesOf("World!")); // 2 System.out.println("All = " + bag.occurrencesOf("All!")); // 1 System.out.println("Hi = " + bag.occurrencesOf("Hi")); // 1 System.out.println("Empty = " + bag.occurrencesOf("Empty")); // 0 // System.out.println(bag.size()); // 6 // System.out.println(bag.toSet().size()); // 4
4. , JDK multiSet HashMap
multiSet HashMap
, , , multiSet
Bag.
Bag.
// String INPUT_TEXT = "Hello World! Hello All! Hi World!"; List<String> listResult = Arrays.asList(INPUT_TEXT.split(" ")); // Multiset c HashMap Map<String, Integer> fakeMultiset = new HashMap<String,Integer>(listResult.size()); for(String word: listResult) { Integer cnt = fakeMultiset.get(word); fakeMultiset.put(word, cnt == null ? 1 : cnt + 1); } // - System.out.println(fakeMultiset); // {World!=2, Hi=1, Hello=2, All!=1}- // System.out.println(fakeMultiset.keySet()); // [World!, Hi, Hello, All!] - // System.out.println("Hello = " + fakeMultiset.get("Hello")); // 2 System.out.println("World = " + fakeMultiset.get("World!")); // 2 System.out.println("All = " + fakeMultiset.get("All!")); // 1 System.out.println("Hi = " + fakeMultiset.get("Hi")); // 1 System.out.println("Empty = " + fakeMultiset.get("Empty")); // null // Integer cnt = 0; for (Integer wordCount : fakeMultiset.values()){ cnt += wordCount; } System.out.println(cnt); // 6 // System.out.println(fakeMultiset.size()); // 4
4.2 Multimap guava, Apache Commons Collections GS Collections
, Multimap map, .
.
, â ,
â , JDK
JDK .
: , .
|
| -
- |
|
- | Guava | ã¢ããã
Commons Collections | GS
Collections | JDK |
---|---|---|---|---|---|---|---|---|
- | HashMap | ArrayList | ArrayList-
Multimap | MultiValueMap | FastList-
Multimap | HashMap<K,
ArrayList<V>> | ||
ãã | HashMap | HashSet | HashMultimap | MultiValueMap.
multiValueMap( new HashMap<K, Set>(), HashSet.class); | UnifiedSet-
Multimap | HashMap<K,
HashSet<V>> | ||
-
| ãã | HashMap | TreeSet | Multimaps.
newMultimap( HashMap, Supplier <TreeSet>) | MultiValueMap.
multiValueMap( new HashMap<K, Set>(), TreeSet.class); | TreeSortedSet-
Multimap | HashMap<K,
TreeSet<V>> | |
- |
- | Linked
HashMap | ArrayList | LinkedList-
Multimap | MultiValueMap.
multiValueMap(new LinkedHashMap<K, List>(), ArrayList.class); | LinkedHashMap<
K, ArrayList<V>> | ||
- |
- | ãã | LinkedHash-
Multimap | Linked-
HashSet | LinkedHash-
Multimap | MultiValueMap.
multiValueMap(new LinkedHashMap<K, Set>(), LinkedHashSet.class); | LinkedHashMap<K,
LinkedHashSet<V>> | |
-
| -
| ãã | TreeMap | TreeSet | TreeMultimap | MultiValueMap.
multiValueMap( new TreeMap<K, Set>(),TreeSet.class); | TreeMap<K,
TreeSet<V>> |
, Apache Commons Collections ,
. guava ,
map' . GS Collections
multimap Bag (HashBagMultimap), . multiset multimap.
Multimap
: «Hello World! Hello All! Hi World!»,
,
, Hello ..
1. Multimap Guava:
HashMultimap guava
, , (
HashMap, HashSet). .
HashMap, HashSet). .
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List <String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap Multimap<String, Integer> multiMap = HashMultimap.create(); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hi=[4], Hello=[0, 2], World!=[1, 5], All!=[3]} - // System.out.println(multiMap.keySet()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // [] // System.out.println(multiMap.size()); // 6 // System.out.println(multiMap.keySet().size()); // 4
ArrayListMultimapTest guava
, ,
( HashMap, ArrayList).
.
( HashMap, ArrayList).
.
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List <String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap Multimap<String, Integer> multiMap = ArrayListMultimap.create(); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hi=[4], Hello=[0, 2], World!=[1, 5], All!=[3]} - , // System.out.println(multiMap.keySet()); // [Hello, World!, All!, Hi]- // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // [] // System.out.println(multiMap.size()); // 6 // System.out.println(multiMap.keySet().size()); // 4
LinkedHashMultimapTest guava
, (
LinkedHashMap, LinkedHashSet).
.
LinkedHashMap, LinkedHashSet).
.
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List <String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap Multimap<String, Integer> multiMap = LinkedHashMultimap.create(); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hello=[0, 2], World!=[1, 5], All!=[3], Hi=[4]}- // System.out.println(multiMap.keySet()); // [Hello, World!, All!, Hi]- // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // [] // System.out.println(multiMap.size()); // 6 // System.out.println(multiMap.keySet().size()); // 4
LinkedListMultimapTest guava
, (
LinkedHashMap, LinkedList).
.
LinkedHashMap, LinkedList).
.
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List <String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap Multimap<String, Integer> multiMap = LinkedListMultimap.create(); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hello=[0, 2], World!=[1, 5], All!=[3], Hi=[4]}- // System.out.println(multiMap.keySet()); // [Hello, World!, All!, Hi]- // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // [] // System.out.println(multiMap.size()); // 6 // System.out.println(multiMap.keySet().size()); // 4
TreeMultimapTest guava
, (
TreeMap, TreeSet).
TreeMap, TreeSet).
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List<String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap Multimap<String, Integer> multiMap = TreeMultimap.create(); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hello=[0, 2], World!=[1, 5], All!=[3], Hi=[4]}- // System.out.println(multiMap.keySet()); // [Hello, World!, All!, Hi]- // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // [] // System.out.println(multiMap.size()); // 6 // System.out.println(multiMap.keySet().size()); // 4
2. MultiValueMap Apache Commons Collections:
MultiValueMap Apache Commons Collections
, ( HashMap
ArrayList )
ArrayList )
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List<String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap MultiMap<String, Integer> multiMap = new MultiValueMap<String, Integer>(); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hi=[4], Hello=[0, 2], World!=[1, 5], All!=[3]} - // System.out.println(multiMap.keySet()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // null // System.out.println(multiMap.keySet().size()); // 4
MultiValueMap, TreeMap<String, TreeSet>()
,
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List<String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap MultiMap<String, Integer> multiMap = MultiValueMap.multiValueMap(new TreeMap<String, Set>(), TreeSet.class); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {All!=[3], Hello=[0, 2], Hi=[4], World!=[1, 5]} - // System.out.println(multiMap.keySet()); // [All!, Hello, Hi, World!] // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // null // System.out.println(multiMap.keySet().size()); // 4
MultiValueMap, LinkedHashMap<String, LinkedHashSet>()
,
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List<String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap MultiMap<String, Integer> multiMap = MultiValueMap.multiValueMap(new LinkedHashMap<String, Set>(), LinkedHashSet.class); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hello=[0, 2], World!=[1, 5], All!=[3], Hi=[4]} - // System.out.println(multiMap.keySet()); // [Hello, World!, All!, Hi] - // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // null // System.out.println(multiMap.keySet().size()); // 4
3. Multimap GS Collections:
FastListMultimap
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List<String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap MutableListMultimap<String, Integer> multiMap = new FastListMultimap<String, Integer>(); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hi=[4], World!=[1, 5], Hello=[0, 2], All!=[3]}- // System.out.println(multiMap.keysView()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // [] // System.out.println(multiMap.size()); // 6 // System.out.println(multiMap.keysView().size()); // 4
HashBagMultimap
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List<String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap MutableBagMultimap<String, Integer> multiMap = new HashBagMultimap<String, Integer>(); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hi=[4], World!=[1, 5], Hello=[0, 2], All!=[3]}- // System.out.println(multiMap.keysView()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // [] // System.out.println(multiMap.size()); // 6 // System.out.println(multiMap.keysView().size()); // 4
TreeSortedSetMultimap
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List<String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap MutableSortedSetMultimap<String, Integer> multiMap = new TreeSortedSetMultimap<String, Integer>(); // Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // System.out.println(multiMap); // {Hi=[4], World!=[1, 5], Hello=[0, 2], All!=[3]}- // System.out.println(multiMap.keysView()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + multiMap.get("Hello")); // [0, 2] System.out.println("World = " + multiMap.get("World!")); // [1, 5] System.out.println("All = " + multiMap.get("All!")); // [3] System.out.println("Hi = " + multiMap.get("Hi")); // [4] System.out.println("Empty = " + multiMap.get("Empty")); // [] // System.out.println(multiMap.size()); // 6 // System.out.println(multiMap.keysView().size()); // 4
4. , JDK multiMap HashMap
multiMap HashMap
final int LIST_INDEXES_CAPACITY = 50; String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // List<String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Multimap Map<String, List<Integer>> fakeMultiMap = new HashMap<String, List<Integer>>(words.size()); // map int i = 0; for(String word: words) { List<Integer> indexes = fakeMultiMap.get(word); if(indexes == null) { indexes = new ArrayList<Integer>(LIST_INDEXES_CAPACITY); fakeMultiMap.put(word, indexes); } indexes.add(i); i++; } // System.out.println(fakeMultiMap); // {Hi=[4], Hello=[0, 2], World!=[1, 5], All!=[3]} - // System.out.println(fakeMultiMap.keySet()); // [Hi, Hello, World!, All!] - // System.out.println("Hello = " + fakeMultiMap.get("Hello")); // [0, 2] System.out.println("World = " + fakeMultiMap.get("World!")); // [1, 5] System.out.println("All = " + fakeMultiMap.get("All!")); // [3] System.out.println("Hi = " + fakeMultiMap.get("Hi")); // [4] System.out.println("Empty = " + fakeMultiMap.get("Empty")); // null // int cnt = 0; for(List<Integer> lists: fakeMultiMap.values()) { cnt += lists.size(); } System.out.println(cnt); // 6 // System.out.println(fakeMultiMap.keySet().size()); // 4
4.3 BiMap guava, Apache Commons Collections GS Collections
BiMap , HashBiMap guava GS Collections
BidiMap Apache Commons Collections. HashBiMap, guava Enum
, EnumHashBiMap EnumBiMap, Apache Commons Collections
, .
BiMap - «»,
: ,
- , .
1. BiMap Guava:
BiMap guava
String[] englishWords = {"one", "two", "three","ball","snow"}; String[] russianWords = {"", "", "","","c"}; // Multiset BiMap<String, String> biMap = HashBiMap.create(englishWords.length); // - int i = 0; for(String englishWord: englishWords) { biMap.put(englishWord, russianWords[i]); i++; } // - System.out.println(biMap); // {two=, three=, snow=c, ball=, one=} - // System.out.println(biMap.keySet()); // [two, three, snow, ball, one] - System.out.println(biMap.values()); // [, , c, , ]- // System.out.println("one = " + biMap.get("one")); // one = System.out.println("two = " + biMap.get("two")); // two = System.out.println(" = " + biMap.inverse().get("")); // = ball System.out.println(" = " + biMap.inverse().get("c")); // = snow System.out.println("empty = " + biMap.get("empty")); // empty = null // System.out.println(biMap.size()); // 5
EnumBiMap guava
enum ENGLISH_WORD { ONE, TWO, THREE, BALL, SNOW } enum POLISH_WORD { JEDEN, DWA, TRZY, KULA, SNIEG } // - , public static void main(String[] args) { ENGLISH_WORD[] englishWords = ENGLISH_WORD.values(); POLISH_WORD[] polishWords = POLISH_WORD.values(); // Multiset BiMap<ENGLISH_WORD, POLISH_WORD> biMap = EnumBiMap.create(ENGLISH_WORD.class, POLISH_WORD.class); // - int i = 0; for(ENGLISH_WORD englishWord: englishWords) { biMap.put(englishWord, polishWords[i]); i++; } // - System.out.println(biMap); // {ONE=JEDEN, TWO=DWA, THREE=TRZY, BALL=KULA, SNOW=SNIEG} // System.out.println(biMap.keySet()); // [ONE, TWO, THREE, BALL, SNOW] System.out.println(biMap.values()); // [JEDEN, DWA, TRZY, KULA, SNIEG] // System.out.println("one = " + biMap.get(ENGLISH_WORD.ONE)); // one = JEDEN System.out.println("two = " + biMap.get(ENGLISH_WORD.TWO)); // two = DWA System.out.println("kula = " + biMap.inverse().get(POLISH_WORD.KULA)); // kula = BALL System.out.println("snieg = " + biMap.inverse().get(POLISH_WORD.SNIEG)); // snieg = SNOW System.out.println("empty = " + biMap.get("empty")); // empty = null // System.out.println(biMap.size()); // 5 }
EnumHashBiMap guava
enum ENGLISH_WORD { ONE, TWO, THREE, BALL, SNOW } // - , public static void main(String[] args) { ENGLISH_WORD[] englishWords = ENGLISH_WORD.values(); String[] russianWords = {"", "", "","","c"}; // Multiset BiMap<ENGLISH_WORD, String> biMap = EnumHashBiMap.create(ENGLISH_WORD.class); // - int i = 0; for(ENGLISH_WORD englishWord: englishWords) { biMap.put(englishWord, russianWords[i]); i++; } // - System.out.println(biMap); // {ONE=, TWO=, THREE=, BALL=, SNOW=c} // System.out.println(biMap.keySet()); // [ONE, TWO, THREE, BALL, SNOW] System.out.println(biMap.values()); // [, , , , c] // System.out.println("one = " + biMap.get(ENGLISH_WORD.ONE)); // one = System.out.println("two = " + biMap.get(ENGLISH_WORD.TWO)); // two = System.out.println(" = " + biMap.inverse().get("")); // = BALL System.out.println(" = " + biMap.inverse().get("c")); // = SNOW System.out.println("empty = " + biMap.get("empty")); // empty = null // System.out.println(biMap.size()); // 5 }
2. C BidiMap Apache Commons Collections:
DualHashBidiMap Apache Commons Collections
String[] englishWords = {"one", "two", "three","ball","snow"}; String[] russianWords = {"", "", "","","c"}; // Multiset BidiMap<String, String> biMap = new DualHashBidiMap(); // - int i = 0; for(String englishWord: englishWords) { biMap.put(englishWord, russianWords[i]); i++; } // - System.out.println(biMap); // {ball=, snow=c, one=, two=, three=}- // System.out.println(biMap.keySet()); // [ball, snow, one, two, three]- System.out.println(biMap.values()); // [, c, , , ]- // System.out.println("one = " + biMap.get("one")); // one = System.out.println("two = " + biMap.get("two")); // two = System.out.println(" = " + biMap.getKey("")); // = ball System.out.println(" = " + biMap.getKey("c")); // = snow System.out.println("empty = " + biMap.get("empty")); // empty = null // System.out.println(biMap.size()); // 5
3. C HashBiMap GS Collections:
HashBiMap GS Collections
String[] englishWords = {"one", "two", "three","ball","snow"}; String[] russianWords = {"", "", "","","c"}; // Multiset MutableBiMap<String, String> biMap = new HashBiMap(englishWords.length); // - int i = 0; for(String englishWord: englishWords) { biMap.put(englishWord, russianWords[i]); i++; } // - System.out.println(biMap); // {two=, ball=, one=, snow=c, three=} - // System.out.println(biMap.keySet()); // [snow, two, one, three, ball] - System.out.println(biMap.values()); // [, , , c, ] - // System.out.println("one = " + biMap.get("one")); // one = System.out.println("two = " + biMap.get("two")); // two = System.out.println(" = " + biMap.inverse().get("")); // = ball System.out.println(" = " + biMap.inverse().get("c")); // = snow System.out.println("empty = " + biMap.get("empty")); // empty = null // System.out.println(biMap.size()); // 5
4. , JDK
HashMap BiMap
String[] englishWords = {"one", "two", "three","ball","snow"}; String[] russianWords = {"", "", "","","c"}; // BiMap Map<String, String> biMapKeys = new HashMap(englishWords.length); Map<String, String> biMapValues = new HashMap(russianWords.length); // - int i = 0; for(String englishWord: englishWords) { biMapKeys.put(englishWord, russianWords[i]); biMapValues.put(russianWords[i], englishWord); i++; } // - System.out.println(biMapKeys); // {ball=, two=, three=, snow=c, one=}- // System.out.println(biMapKeys.keySet()); // [ball, two, three, snow, one] - System.out.println(biMapValues.keySet()); // [, , , c, ] - // System.out.println("one = " + biMapKeys.get("one")); // one = System.out.println("two = " + biMapKeys.get("two")); // two = System.out.println(" = " + biMapValues.get("")); // = ball System.out.println(" = " + biMapValues.get("c")); // = snow System.out.println("empty = " + biMapValues.get("empty")); // empty = null // System.out.println(biMapKeys.size()); // 5
V.
, JDK. , , ( ), , .
5.1 .
Guava gs-collections new, jdk.
5.1.1) (List)
åœ¹è· | JDK | guava | gs-collections |
---|---|---|---|
new ArrayList<>() | Lists.newArrayList() | FastList.newList() | |
Arrays.asList(«1», «2», «3») | Lists.newArrayList(«1», «2», «3») | FastList.newListWith(«1», «2», «3») | |
capacity | new ArrayList<>(100) | Lists.newArrayListWithCapacity(100) | FastList.newList(100) |
| new ArrayList<>(collection) | Lists.newArrayList(collection) | FastList.newList(collection) |
Iterable | - | Lists.newArrayList(iterable) | FastList.newList(iterable) |
Iterator' | - | Lists.newArrayList(iterator) | - |
Arrays.asList(array) | Lists.newArrayList(array) | FastList.newListWith(array) | |
c | - | - | FastList.newWithNValues(10, () -> «1») |
// List<String> emptyGuava = Lists.newArrayList(); // c guava List<String> emptyJDK = new ArrayList<>(); // JDK MutableList<String> emptyGS = FastList.newList(); // c gs // 100 List < String > exactly100 = Lists.newArrayListWithCapacity(100); // c guava List<String> exactly100JDK = new ArrayList<>(100); // JDK MutableList<String> empty100GS = FastList.newList(100); // c gs // 100 ( 100) List<String> approx100 = Lists.newArrayListWithExpectedSize(100); // c guava List<String> approx100JDK = new ArrayList<>(115); // JDK MutableList<String> approx100GS = FastList.newList(115); // c gs // List<String> withElements = Lists.newArrayList("alpha", "beta", "gamma"); // c guava List<String> withElementsJDK = Arrays.asList("alpha", "beta", "gamma"); // JDK MutableList<String> withElementsGS = FastList.newListWith("alpha", "beta", "gamma"); // c gs System.out.println(withElements); System.out.println(withElementsJDK); System.out.println(withElementsGS); // Iterable ( ) Collection<String> collection = new HashSet<>(3); collection.add("1"); collection.add("2"); collection.add("3"); List<String> fromIterable = Lists.newArrayList(collection); // c guava List<String> fromIterableJDK = new ArrayList<>(collection); // JDK MutableList<String> fromIterableGS = FastList.newList(collection); // c gs System.out.println(fromIterable); System.out.println(fromIterableJDK); System.out.println(fromIterableGS); /* JDK Collection , guava gs Iterable */ // Iterator' Iterator<String> iterator = collection.iterator(); List<String> fromIterator = Lists.newArrayList(iterator); // c guava, JDK System.out.println(fromIterator); // String[] array = {"4", "5", "6"}; List<String> fromArray = Lists.newArrayList(array); // c guava List<String> fromArrayJDK = Arrays.asList(array); // JDK MutableList<String> fromArrayGS = FastList.newListWith(array); // c gs System.out.println(fromArray); System.out.println(fromArrayJDK); System.out.println(fromArrayGS); // c MutableList<String> fromFabricGS = FastList.newWithNValues(10, () -> String.valueOf(Math.random())); // c gs System.out.println(fromFabricGS);
5.1.2) (set)
åœ¹è· | JDK | guava | gs-collections |
---|---|---|---|
| new HashSet<>() | Sets.newHashSet() | UnifiedSet.newSet() |
| new HashSet<>(Arrays.asList(«alpha», «beta», «gamma»)) | Sets.newHashSet(«alpha», «beta», «gamma») | UnifiedSet.newSetWith(«alpha», «beta», «gamma») |
| new HashSet<>(collection) | Sets.newHashSet(collection) | UnifiedSet.newSet(collection) |
Iterable | - | Sets.newHashSet(iterable) | UnifiedSet.newSet(iterable) |
Iterator' | - | Sets.newHashSet(iterator); | - |
| new HashSet<>(Arrays.asList(array)) | Sets.newHashSet(array) | UnifiedSet.newSetWith(array) |
// Set<String> emptyGuava = Sets.newHashSet(); // c guava Set<String> emptyJDK = new HashSet<>(); // JDK Set<String> emptyGS = UnifiedSet.newSet(); // c gs // 100 ( 100) Set<String> approx100 = Sets.newHashSetWithExpectedSize(100); // c guava Set<String> approx100JDK = new HashSet<>(130); // JDK Set<String> approx100GS = UnifiedSet.newSet(130); // c gs // Set<String> withElements = Sets.newHashSet("alpha", "beta", "gamma"); // c guava Set<String> withElementsJDK = new HashSet<>(Arrays.asList("alpha", "beta", "gamma")); // JDK Set<String> withElementsGS = UnifiedSet.newSetWith("alpha", "beta", "gamma"); // c gs System.out.println(withElements); System.out.println(withElementsJDK); System.out.println(withElementsGS); // Iterable ( ) Collection<String> collection = new ArrayList<>(3); collection.add("1"); collection.add("2"); collection.add("3"); Set<String> fromIterable = Sets.newHashSet(collection); // c guava Set<String> fromIterableJDK = new HashSet<>(collection); // JDK Set<String> fromIterableGS = UnifiedSet.newSet(collection); // c gs System.out.println(fromIterable); System.out.println(fromIterableJDK); System.out.println(fromIterableGS); /* JDK Collection , guava Iterable */ // Iterator' Iterator<String> iterator = collection.iterator(); Set<String> fromIterator = Sets.newHashSet(iterator); // c guava, JDK System.out.println(fromIterator); // String[] array = {"4", "5", "6"}; Set<String> fromArray = Sets.newHashSet(array); // c guava Set<String> fromArrayJDK = new HashSet<>(Arrays.asList(array)); // JDK Set<String> fromArrayGS = UnifiedSet.newSetWith(array); // c gs System.out.println(fromArray); System.out.println(fromArrayJDK); System.out.println(fromArrayGS);
5.1.3) Map
åœ¹è· | JDK | guava | gs-collections |
---|---|---|---|
map' | new HashMap<>() | Maps.newHashMap() | UnifiedMap.newMap() |
map' c
capacity | new HashMap<>(130) | Maps.newHashMapWithExpectedSize(100) | UnifiedMap.newMap(130) |
map' map' | new HashMap<>(map) | Maps.newHashMap(map) | UnifiedMap.newMap(map) |
map' | - | - | UnifiedMap.newWithKeysValues(«1», «a», «2», «b») |
map
//
Map<String, String> emptyGuava = Maps.newHashMap(); // c guava
Map<String, String> emptyJDK = new HashMap<>(); // JDK
Map<String, String> emptyGS = UnifiedMap.newMap(); // c gs
// map' 100 ( 100)
Map<String, String> approx100 = Maps.newHashMapWithExpectedSize(100); // c guava
Map<String, String> approx100JDK = new HashMap<>(130); // JDK
Map<String, String> approx100GS = UnifiedMap.newMap(130); // c gs
// map' map'
Map<String, String> map = new HashMap<>(3);
map.put(«k1»,«v1»);
map.put(«k2»,«v2»);
Map<String, String> withMap = Maps.newHashMap(map); // c guava
Map<String, String> withMapJDK = new HashMap<>(map); // JDK
Map<String, String> withMapGS = UnifiedMap.newMap(map); // c gs
System.out.println(withMap);
System.out.println(withMapJDK);
System.out.println(withMapGS);
// map'
Map<String, String> withKeys = UnifiedMap.newWithKeysValues(«1», «a», «2», «b»);
System.out.println(withKeys);
Map<String, String> emptyGuava = Maps.newHashMap(); // c guava
Map<String, String> emptyJDK = new HashMap<>(); // JDK
Map<String, String> emptyGS = UnifiedMap.newMap(); // c gs
// map' 100 ( 100)
Map<String, String> approx100 = Maps.newHashMapWithExpectedSize(100); // c guava
Map<String, String> approx100JDK = new HashMap<>(130); // JDK
Map<String, String> approx100GS = UnifiedMap.newMap(130); // c gs
// map' map'
Map<String, String> map = new HashMap<>(3);
map.put(«k1»,«v1»);
map.put(«k2»,«v2»);
Map<String, String> withMap = Maps.newHashMap(map); // c guava
Map<String, String> withMapJDK = new HashMap<>(map); // JDK
Map<String, String> withMapGS = UnifiedMap.newMap(map); // c gs
System.out.println(withMap);
System.out.println(withMapJDK);
System.out.println(withMapGS);
// map'
Map<String, String> withKeys = UnifiedMap.newWithKeysValues(«1», «a», «2», «b»);
System.out.println(withKeys);
5.2 .
åœ¹è· | JDK | guava | apache | gs-collections |
---|---|---|---|---|
Collections.frequency(collection, «1») | Iterables.frequency(iterable, «1») | CollectionUtils.cardinality(«1», iterable) | mutableCollection.count((each) -> «a1».equals(each)) | |
collection.stream().findFirst().orElse(«1») | Iterables.getFirst(iterable, «1») | CollectionUtils.get(iterable, 0) | orderedIterable.getFirst() | |
collection.stream().skip(collection.size()-1).findFirst().orElse(«1»); | Iterables.getLast(iterable, «1») | CollectionUtils.get(collection, collection.size()-1) | orderedIterable.getLast() | |
Collections.max(collection) | Ordering.natural().max(iterable) | - | orderedIterable.max() | |
Collections.min(collection) | Ordering.natural().min(iterable) | - | orderedIterable.min() | |
Iterables.getOnlyElement(iterable) | CollectionUtils.extractSingleton(collection) | |||
Collections.binarySearch(list, «13») | Ordering.natural().binarySearch(list, «13») | mutableList.binarySearch(«13») | ||
collection.stream().filter(«13»::equals).findFirst().get() | Iterables.find(iterable, «13»::equals) | CollectionUtils.find(iterable, «13»::equals) | mutableList.select(«13»::equals).get(0) | |
collection.stream().filter((s) -> s.contains(«1»)).collect(Collectors.toList()) | Iterables.filter(iterable, (s) -> s.contains(«1»)) | CollectionUtils.select(iterable, (s) -> s.contains(«1»)) | mutableCollection.select((s) -> s.contains(«1»)) |
:
1)
Collection<String> collection = Lists.newArrayList("a1", "a2", "a3", "a1"); Iterable<String> iterable = collection; MutableCollection<String> collectionGS = FastList.newListWith("a1", "a2", "a3", "a1"); // int i1 = Iterables.frequency(iterable, "a1"); // guava int i2 = Collections.frequency(collection, "a1"); // c JDK int i3 = CollectionUtils.cardinality("a1", iterable); // c Apache int i4 = collectionGS.count((s) -> "a1".equals(s)); long i5 = collection.stream().filter((s) -> "a1".equals(s)).count(); // c stream JDK System.out.println("count = " + i1 + ":" + i2 + ":" + i3 + ":" + i4 + ":" + i5); // count = 2:2:2:2:2
2)
Collection<String> collection = Lists.newArrayList("a1", "a2", "a3", "a1"); OrderedIterable<String> orderedIterable = FastList.newListWith("a1", "a2", "a3", "a1"); Iterable<String> iterable = collection; // Iterator<String> iterator = collection.iterator(); // c JDK String jdk = iterator.hasNext() ? iterator.next(): "1"; String guava = Iterables.getFirst(iterable, "1"); // guava String apache = CollectionUtils.get(iterable, 0); // c Apache String gs = orderedIterable.getFirst(); // c GS String stream = collection.stream().findFirst().orElse("1"); // c Stream API System.out.println("first = " + jdk + ":" + guava + ":" + apache + ":" + gs + ":" + stream); // first = a1:a1:a1:a1:a1
3)
Collection<String> collection = Lists.newArrayList("a1", "a2", "a3", "a8"); OrderedIterable<String> orderedIterable = FastList.newListWith("a1", "a2", "a3", "a8"); Iterable<String> iterable = collection; // Iterator<String> iterator = collection.iterator(); // c JDK String jdk = "1"; while(iterator.hasNext()) { jdk = iterator.next(); } String guava = Iterables.getLast(iterable, "1"); // guava String apache = CollectionUtils.get(collection, collection.size()-1); // c Apache String gs = orderedIterable.getLast(); // c GS String stream = collection.stream().skip(collection.size()-1).findFirst().orElse("1"); // c Stream API System.out.println("last = " + jdk + ":" + guava + ":" + apache + ":" + gs + ":" + stream); // last = a8:a8:a8:a8:a8
4)
Collection<String> collection = Lists.newArrayList("5", "1", "3", "8", "4"); OrderedIterable<String> orderedIterable = FastList.newListWith("5", "1", "3", "8", "4"); Iterable<String> iterable = collection; // String jdk = Collections.max(collection); // c JDK String gs = orderedIterable.max(); // c GS String guava = Ordering.natural().max(iterable); // guava System.out.println("max = " + jdk + ":" + guava + ":" + gs); // max = 8:8:8
5)
Collection<String> collection = Lists.newArrayList("5", "1", "3", "8", "4"); OrderedIterable<String> orderedIterable = FastList.newListWith("5", "1", "3", "8", "4"); Iterable<String> iterable = collection; // String jdk = Collections.min(collection); // c JDK String gs = orderedIterable.min(); // c GS String guava = Ordering.natural().min(iterable); // guava System.out.println("min = " + jdk + ":" + guava + ":" + gs); // min = 1:1:1
6)
Collection<String> collection = Lists.newArrayList("a3"); OrderedIterable<String> orderedIterable = FastList.newListWith("a3"); Iterable<String> iterable = collection; // String guava = Iterables.getOnlyElement(iterable); // guava String jdk = collection.iterator().next(); // c JDK String apache = CollectionUtils.extractSingleton(collection); // c Apache assert(orderedIterable.size() > 1);// c GS String gs = orderedIterable.getFirst(); System.out.println("single = " + jdk + ":" + guava + ":" + apache + ":" + gs); // single = a3:a3:a3:a3
7)
List<String> list = Lists.newArrayList("2", "4", "13", "31", "43"); MutableList<String> mutableList = FastList.newListWith("2", "4","13", "31", "43"); // int jdk = Collections.binarySearch(list, "13"); int guava = Ordering.natural().binarySearch(list, "13"); int gs = mutableList.binarySearch("13"); System.out.println("find = " + jdk + ":" + guava + ":" + gs); // find = 2:2:2
8)
Collection<String> collection = Lists.newArrayList("a1", "a2", "a3", "a1"); MutableCollection<String> orderedIterable = FastList.newListWith("a1", "a2", "a3", "a1"); Iterable<String> iterable = collection; // String jdk = collection.stream().skip(2).findFirst().get(); // c JDK String guava = Iterables.get(iterable, 2); // guava String apache = CollectionUtils.get(iterable, 2); // c Apache System.out.println("third = " + jdk + ":" + guava + ":" + apache); // third = a3:a3:a3
9)
Collection<String> collection = Lists.newArrayList("2", "14", "3", "13", "43"); MutableCollection<String> mutableCollection = FastList.newListWith("2", "14", "3", "13", "43"); Iterable<String> iterable = collection; // List<String> jdk = collection.stream().filter((s) -> s.contains("1")).collect(Collectors.toList()); // c JDK Iterable<String> guava = Iterables.filter(iterable, (s) -> s.contains("1")); // guava Collection<String> apache = CollectionUtils.select(iterable, (s) -> s.contains("1")); // c Apache MutableCollection<String> gs = mutableCollection.select((s) -> s.contains("1")); // c GS System.out.println("select = " + jdk + ":" + guava + ":" + apache + ":" + gs); // select = [14, 13]:[14, 13]:[14, 13]:[14, 13]
5.3 ,
åœ¹è· | JDK | guava | apache | gs-collections |
---|---|---|---|---|
collection1.containsAll(collection2) | Iterables.elementsEqual(iterable1, iterable2) | CollectionUtils.containsAll(collection1, collection2) | mutableCollection1.containsAll(mutableCollection2) | |
!Collections.disjoint(collection1, collection2) | !Sets.intersection(set1, set2).isEmpty() | CollectionUtils.containsAny(collection1, collection2) | !mutableSet1.intersect(mutableSet2).isEmpty() | |
() | Set<T> result = new HashSet<>(set1);
result.retainAll(set2) | Sets.intersection(set1, set2) | CollectionUtils.intersection(collection1, collection2) | mutableSet1.intersect(mutableSet2) |
Collections.disjoint(collection1, collection2) | Sets.intersection(set1, set2).isEmpty() | !CollectionUtils.containsAny(collection1, collection2) | mutableSet1.intersect(mutableSet2).isEmpty() | |
, (difference) | Set<T> result = new HashSet<>(set1);
result.removeAll(set2) | Sets.difference(set1, set2) | CollectionUtils.removeAll(collection1, collection2) | mutableSet1.difference(mutableSet2) |
(symmetric difference) | Sets.symmetricDifference(set1, set2) | CollectionUtils.disjunction(collection1, collection2) | mutableSet1.symmetricDifference(mutableSet2) | |
Set<T> result = new HashSet<>(set1);
result.addAll(set2) | Sets.union(set1, set2) | CollectionUtils.union(collection1, collection2) | mutableSet1.union(mutableSet2) |
:
1)
Collection<String> collection1 = Lists.newArrayList("a1", "a2", "a3", "a1"); Collection<String> collection2 = Lists.newArrayList("a1", "a2", "a3", "a1"); Iterable<String> iterable1 = collection1; Iterable<String> iterable2 = collection2; MutableCollection<String> mutableCollection1 = FastList.newListWith("a1", "a2", "a3", "a1"); MutableCollection<String> mutableCollection2 = FastList.newListWith("a1", "a2", "a3", "a1"); // boolean jdk = collection1.containsAll(collection2); // c JDK boolean guava = Iterables.elementsEqual(iterable1, iterable2); // guava boolean apache = CollectionUtils.containsAll(collection1, collection2); // c Apache boolean gs = mutableCollection1.containsAll(mutableCollection2); // c GS System.out.println("containsAll = " + jdk + ":" + guava + ":" + apache + ":" + gs); // containsAll = true:true:true:true
2)
Collection<String> collection1 = Lists.newArrayList("a1", "a2", "a3", "a1"); Collection<String> collection2 = Lists.newArrayList("a4", "a8", "a3", "a5"); Set<String> set1 = Sets.newHashSet("a1", "a2", "a3", "a1"); Set<String> set2 = Sets.newHashSet("a4", "a8", "a3", "a5"); MutableSet<String> mutableSet1 = UnifiedSet.newSetWith("a1", "a2", "a3", "a1"); MutableSet<String> mutableSet2 = UnifiedSet.newSetWith("a4", "a8", "a3", "a5"); // boolean jdk = !Collections.disjoint(collection1, collection2); // c JDK boolean guava = !Sets.intersection(set1, set2).isEmpty(); // guava boolean apache = CollectionUtils.containsAny(collection1, collection2); // c Apache boolean gs = !mutableSet1.intersect(mutableSet2).isEmpty(); // c GS System.out.println("containsAny = " + jdk + ":" + guava + ":" + apache + ":" + gs); // containsAny = true:true:true:true
3) ()
Collection<String> collection1 = Lists.newArrayList("a1", "a2", "a3", "a1"); Collection<String> collection2 = Lists.newArrayList("a4", "a8", "a3", "a5"); Set<String> set1 = Sets.newHashSet("a1", "a2", "a3", "a1"); Set<String> set2 = Sets.newHashSet("a4", "a8", "a3", "a5"); MutableSet<String> mutableSet1 = UnifiedSet.newSetWith("a1", "a2", "a3", "a1"); MutableSet<String> mutableSet2 = UnifiedSet.newSetWith("a4", "a8", "a3", "a5"); // Set<String> jdk = new HashSet<>(set1); // c JDK jdk.retainAll(set2); Set<String> guava = Sets.intersection(set1, set2); // guava Collection<String> apache = CollectionUtils.intersection(collection1, collection2); // c Apache Set<String> gs = mutableSet1.intersect(mutableSet2); // c GS System.out.println("intersect = " + jdk + ":" + guava + ":" + apache + ":" + gs); // intersect = [a3]:[a3]:[a3]:[a3]
4) , (difference)
Collection<String> collection1 = Lists.newArrayList("a2", "a3"); Collection<String> collection2 = Lists.newArrayList("a8", "a3", "a5"); Set<String> set1 = Sets.newHashSet("a2", "a3"); Set<String> set2 = Sets.newHashSet("a8", "a3", "a5"); MutableSet<String> mutableSet1 = UnifiedSet.newSetWith("a2", "a3"); MutableSet<String> mutableSet2 = UnifiedSet.newSetWith("a8", "a3", "a5"); // , (difference) Set<String> jdk = new HashSet<>(set1); // c JDK jdk.removeAll(set2); Set<String> guava = Sets.difference(set1, set2); // guava Collection<String> apache = CollectionUtils.removeAll(collection1, collection2); // c Apache Set<String> gs = mutableSet1.difference(mutableSet2); // c GS System.out.println("difference = " + jdk + ":" + guava + ":" + apache + ":" + gs); // difference = [a2]:[a2]:[a2]:[a2]
5) (symmetric difference)
Collection<String> collection1 = Lists.newArrayList("a2", "a3"); Collection<String> collection2 = Lists.newArrayList("a8", "a3", "a5"); Set<String> set1 = Sets.newHashSet("a2", "a3"); Set<String> set2 = Sets.newHashSet("a8", "a3", "a5"); MutableSet<String> mutableSet1 = UnifiedSet.newSetWith("a2", "a3"); MutableSet<String> mutableSet2 = UnifiedSet.newSetWith("a8", "a3", "a5"); // (symmetric difference) Set<String> intersect = new HashSet<>(set1); // c JDK intersect.retainAll(set2); Set<String> jdk = new HashSet<>(set1); jdk.addAll(set2); jdk.removeAll(intersect); Set<String> guava = Sets.symmetricDifference(set1, set2); // guava Collection<String> apache = CollectionUtils.disjunction(collection1, collection2); // c Apache Set<String> gs = mutableSet1.symmetricDifference(mutableSet2); // c GS System.out.println("symmetricDifference = " + jdk + ":" + guava + ":" + apache + ":" + gs); // symmetricDifference = [a2, a5, a8]:[a2, a5, a8]:[a2, a5, a8]:[a2, a5, a8]
6)
Set<String> set1 = Sets.newHashSet("a1", "a2"); Set<String> set2 = Sets.newHashSet("a4"); MutableSet<String> mutableSet1 = UnifiedSet.newSetWith("a1", "a2"); MutableSet<String> mutableSet2 = UnifiedSet.newSetWith("a4"); Collection<String> collection1 = set1; Collection<String> collection2 = set2; // Set<String> jdk = new HashSet<>(set1); // c JDK jdk.addAll(set2); Set<String> guava = Sets.union(set1, set2); // guava Collection<String> apache = CollectionUtils.union(collection1, collection2); // c Apache Set<String> gs = mutableSet1.union(mutableSet2); // c GS System.out.println("union = " + jdk + ":" + guava + ":" + apache + ":" + gs); // union = [a1, a2, a4]:[a1, a2, a4]:[a1, a2, a4]:[a1, a2, a4]
5.4
åœ¹è· | JDK | guava | apache | gs-collections |
---|---|---|---|---|
Collections.sort(list); | Ordering.natural().sortedCopy(iterable) | mutableList.sortThis() | ||
collection.removeIf((s) -> s.contains(«1»)) | Iterables.removeIf(iterable, (s) -> s.contains(«1»)) | CollectionUtils.filter(iterable, (s) -> !s.contains(«1»)) | mutableCollection.removeIf((Predicate<String>) (s) -> s.contains(«1»)) | |
collection.removeIf((s) -> !s.contains(«1»)) | Iterables.removeIf(iterable, (s) -> !s.contains(«1»)) | CollectionUtils.filter(iterable, (s) -> s.contains(«1»)) | mutableCollection.removeIf((Predicate<String>) (s) -> !s.contains(«1»)) | |
collection.stream().map((s) -> s + "_1").collect(Collectors.toList()) | Iterables.transform(iterable, (s) -> s + "_1") | CollectionUtils.transform(collection, (s) -> s + "_1") | mutableCollection.collect((s) -> s + "_1") | |
collection.stream().forEach((s) -> s.append("_1")) | Iterables.transform(iterable, (s) -> s.append("_1")) | CollectionUtils.transform(collection, (s) -> s.append("_1")) | mutableCollection.forEach((Procedure<StringBuilder>) (s) -> s.append("_1")) |
1)
List<String> jdk = Lists.newArrayList("a1", "a2", "a3", "a1"); Iterable<String> iterable = jdk; MutableList<String> gs = FastList.newList(jdk); // Collections.sort(jdk); // jdk List<String> guava = Ordering.natural().sortedCopy(iterable); // guava gs.sortThis(); // c gs System.out.println("sort = " + jdk + ":" + guava + ":" + gs); // sort = [a1, a1, a2, a3]:[a1, a1, a2, a3]:[a1, a1, a2, a3]
2)
Collection<String> jdk = Lists.newArrayList("a1", "a2", "a3", "a1"); Iterable<String> guava = Lists.newArrayList(jdk); Iterable<String> apache = Lists.newArrayList(jdk); MutableCollection<String> gs = FastList.newList(jdk); // jdk.removeIf((s) -> s.contains("1")); // jdk Iterables.removeIf(guava, (s) -> s.contains("1")); // guava CollectionUtils.filter(apache, (s) -> !s.contains("1")); // apache gs.removeIf((Predicate<String>) (s) -> s.contains("1")); // c gs System.out.println("removeIf = " + jdk + ":" + guava + ":" + apache + ":" + gs); // removeIf = [a2, a3]:[a2, a3]:[a2, a3]:[a2, a3]
3)
Collection<String> jdk = Lists.newArrayList("a1", "a2", "a3", "a1"); Iterable<String> guava = Lists.newArrayList(jdk); Iterable<String> apache = Lists.newArrayList(jdk); MutableCollection<String> gs = FastList.newList(jdk); // jdk.removeIf((s) -> !s.contains("1")); // jdk Iterables.removeIf(guava, (s) -> !s.contains("1")); // guava CollectionUtils.filter(apache, (s) -> s.contains("1")); // apache gs.removeIf((Predicate<String>) (s) -> !s.contains("1")); // c gs System.out.println("retainIf = " + jdk + ":" + guava + ":" + apache + ":" + gs); // retainIf = [a1, a1]:[a1, a1]:[a1, a1]:[a1, a1]
4)
Collection<String> collection = Lists.newArrayList("a1", "a2", "a3", "a1"); Iterable<String> iterable = collection; Collection<String> apache = Lists.newArrayList(collection); MutableCollection<String> mutableCollection = FastList.newList(collection); // List<String> jdk = collection.stream().map((s) -> s + "_1").collect(Collectors.toList()); // jdk Iterable<String> guava = Iterables.transform(iterable, (s) -> s + "_1"); // guava CollectionUtils.transform(apache, (s) -> s + "_1"); // apache MutableCollection<String> gs = mutableCollection.collect((s) -> s + "_1"); // c gs System.out.println("transform = " + jdk + ":" + guava + ":" + apache + ":" + gs); // transform = [a1_1, a2_1, a3_1, a1_1]:[a1_1, a2_1, a3_1, a1_1]:[a1_1, a2_1, a3_1, a1_1]:[a1_1, a2_1, a3_1, a1_1]
5)
Collection<StringBuilder> jdk = Lists.newArrayList(new StringBuilder("a1"), new StringBuilder("a2"), new StringBuilder("a3")); Iterable<StringBuilder> iterable = Lists.newArrayList(new StringBuilder("a1"), new StringBuilder("a2"), new StringBuilder("a3"));; Collection<StringBuilder> apache = Lists.newArrayList(new StringBuilder("a1"), new StringBuilder("a2"), new StringBuilder("a3")); MutableCollection<StringBuilder> gs = FastList.newListWith(new StringBuilder("a1"), new StringBuilder("a2"), new StringBuilder("a3")); // jdk.stream().forEach((s) -> s.append("_1")); // jdk Iterable<StringBuilder> guava = Iterables.transform(iterable, (s) -> s.append("_1")); // guava CollectionUtils.transform(apache, (s) -> s.append("_1")); // apache gs.forEach((Procedure<StringBuilder>) (s) -> s.append("_1")); // c gs System.out.println("change = " + jdk + ":" + guava + ":" + apache + ":" + gs); // changeAll = [a1_1, a2_1, a3_1]:[a1_1, a2_1, a3_1]:[a1_1, a2_1, a3_1]:[a1_1, a2_1, a3_1]
VI.
5.1
( Java, ):
1) () â , ,
â â ,
â â , ,
â â ,
, ,
â â
,
2) (Stack) â , «LIFO» (« â »).
, /.
3) (Queue) â , «FIFO» (« â »).
/.
4) (Double-ended queue) â ,
.
5) (. priority queue) â ,
. ,
â (heap) â , ,
6) (), (Associative array, Dictionary) â ,
«â »
â - (hashtable) â , ,
â - (Multimap multihash) â -,
,
â - - (bi-map) â -,
, ,
â - (hashtable) â -, ,
â - (hashtable) â -, ,
7) â ,
,
â â , ,
,
â â , , ,
â â , , ,
8) â 1 0,
9) â
,
10) â , ,
11) â ,
Java :
: , .
åœ¹è· | List | Set | Map | Query
Dequery .. JDK | guava | apache | gs-collections |
---|---|---|---|---|---|---|---|
1) ()
| ArrayList | LinkedHashSet | LinkedHashMap | ArrayDeque | TreeList | FastList | |
LinkedList | LinkedHashSet | LinkedHashMap | LinkedList | NodeCachingLinkedList | |||
2) (Stack) | LinkedList | ArrayDeque | ArrayStack | ||||
3) (Queue) | LinkedList | ArrayDeque | CircularFifoQueue | ||||
4) | LinkedList | ArrayDeque | |||||
5)
(heap) | PriorityQueue | ||||||
6) () | HashMap | HashedMap | UnifiedMap | ||||
- (hashtable) | HashSet | HashMap | HashedMap | UnifiedMap | |||
- | Multimap | MultiMap | Multimap | ||||
- - | HashBiMap | BidiMap | HashBiMap | ||||
- | LinkedHashSet | LinkedHashMap | LinkedMap | ||||
- | TreeSet | TreeMap | PatriciaTrie | TreeSortedMap | |||
7) | HashSet | UnifiedSet | |||||
HashMultiset | HashBag | HashBag | |||||
LinkedHashSet | |||||||
TreeSet | PatriciaTrie | TreeSortedSet | |||||
8) | BitSet | ||||||
9) | RangeSet
RangeMap | ||||||
10) | TreeSet | TreeMap | PatriciaTrie | TreeSortedSet | |||
11) | LinkedHashMap
WeakHashMap | LoadingCache |
VII. ãããã«
, , , . , ( ) , - .
github' .
, :
1. java.util.concurrent.* tutorial
2. Trove library: using primitive collections for performance
3. Java performance tuning tips
4. Large HashMap overview
5. Memory consumption of popular Java data types
6. , , , javadoc
PPS opensource [useful-java-links](https://github.com/Vedenin/useful-java-links/tree/master/link-rus) â , Java , . [ ](https://github.com/Vedenin/useful-java-links/) opensource [Hello world](https://github.com/Vedenin/useful-java-links/tree/master/helloworlds) Java maven ( ).