 
      ãã®èšäºã¯ãåå¿è ã«ãšã£ãŠïŒã³ã¬ã¯ã·ã§ã³ãäœã§ããããã³ã¬ã¯ã·ã§ã³ãã©ã®ããã«æ±ããã«ã€ããŠã®äžè¬çãªçè§£ãåŸãããã«ïŒããŸã圹ã«ç«ã€ã³ã¬ã¯ã·ã§ã³ãèŠã€ããããåã«ç¥èãæ§ç¯ãããããçµéšè±å¯ãªããã°ã©ããŒã®äž¡æ¹ã«åœ¹ç«ã¡ãŸãã å®éãäž»èŠãªããšã¯ãã©ã®ããã°ã©ãã³ã°èšèªã®ã³ã¬ã¯ã·ã§ã³ã«ã€ããŠãå°ãªããšãåºæ¬çãªç¥èãæã£ãŠããããšã§ããããã¯ãã³ã¬ã¯ã·ã§ã³ãååãšããŠäœã§ãããã«ã€ããŠã®èšäºã«ã¯èª¬æããªãããã§ãã
  äžè¬çãªç®æ¬¡ãããŒãã·ãŒãã 
        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 ( ).