主頁 > 後端開發 > 關于Java Map應該掌握的問題

關于Java Map應該掌握的問題

2020-11-08 09:14:40 後端開發

    1. 如何把一個Map轉化為List

      日常開發中,我們經常遇到這種場景,把一個Map轉化為List,map轉List有以下三種轉化方式:

      • 把map的鍵key轉化為list
      • 把map的值value轉化為list
      • 把map的鍵值key-value轉化為list

        偽代碼如下:

      [plain] view plaincopy  
      1. // key list  
      2. List  
      3. keyList  
      4. =  
      5.   
      6. new  
      7.   
      8. ArrayList  
      9. (  
      10. map  
      11. .  
      12. keySet  
      13. ());  
      14. // value list  
      15. List  
      16. valueList  
      17. =  
      18.   
      19. new  
      20.   
      21. ArrayList  
      22. (  
      23. map  
      24. .  
      25. values  
      26. ());  
      27. // key-value list  
      28. List  
      29. entryList  
      30. =  
      31.   
      32. new  
      33.   
      34. ArrayList  
      35. (  
      36. map  
      37. .  
      38. entrySet  
      39. ());  

      示例代碼:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. Test  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. Map  
      24. <  
      25. Integer  
      26. ,  
      27.   
      28. String  
      29. >  
      30. map  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37. map  
      38. .  
      39. put  
      40. (  
      41. 2  
      42. ,  
      43.   
      44. "jay"  
      45. );  
      46. map  
      47. .  
      48. put  
      49. (  
      50. 1  
      51. ,  
      52.   
      53. "whx"  
      54. );  
      55. map  
      56. .  
      57. put  
      58. (  
      59. 3  
      60. ,  
      61.   
      62. "huaxiao"  
      63. );  
      64.   
      65. //把一個map的鍵轉化為list  
      66.   
      67. List  
      68. <  
      69. Integer  
      70. >  
      71. keyList  
      72. =  
      73.   
      74. new  
      75.   
      76. ArrayList  
      77. <>(  
      78. map  
      79. .  
      80. keySet  
      81. ());  
      82.   
      83. System  
      84. .  
      85. out  
      86. .  
      87. println  
      88. (  
      89. keyList  
      90. );  
      91.   
      92. //把map的值轉化為list  
      93.   
      94. List  
      95. <  
      96. String  
      97. >  
      98. valueList  
      99. =  
      100.   
      101. new  
      102.   
      103. ArrayList  
      104. <>(  
      105. map  
      106. .  
      107. values  
      108. ());  
      109.   
      110. System  
      111. .  
      112. out  
      113. .  
      114. println  
      115. (  
      116. valueList  
      117. );  
      118.   
      119. 把  
      120. map  
      121. 的鍵值轉化為  
      122. list  
      123.   
      124. List  
      125. entryList  
      126. =  
      127.   
      128. new  
      129.   
      130. ArrayList  
      131. (  
      132. map  
      133. .  
      134. entrySet  
      135. ());  
      136.   
      137. System  
      138. .  
      139. out  
      140. .  
      141. println  
      142. (  
      143. entryList  
      144. );  
      145.   
      146. }  
      147. }  

      運行結果:

      [plain] view plaincopy  
      1. [  
      2. 1  
      3. ,  
      4.   
      5. 2  
      6. ,  
      7.   
      8. 3  
      9. ]  
      10. [  
      11. whx  
      12. ,  
      13. jay  
      14. ,  
      15. huaxiao  
      16. ]  
      17. [  
      18. 1  
      19. =  
      20. whx  
      21. ,  
      22.   
      23. 2  
      24. =  
      25. jay  
      26. ,  
      27.   
      28. 3  
      29. =  
      30. huaxiao  
      31. ]  

      2、如何遍歷一個Map

      我們經常需要遍歷一個map,可以有以下兩種方式實作:

      通過entrySet+for實作遍歷

      [plain] view plaincopy  
      1. for  
      2. (  
      3. Entry  
      4. entry  
      5. :  
      6. map  
      7. .  
      8. entrySet  
      9. ())  
      10.   
      11. {  
      12.   
      13. // get key  
      14. K key  
      15. =  
      16. entry  
      17. .  
      18. getKey  
      19. ();  
      20.   
      21. // get value  
      22. V value  
      23. =  
      24. entry  
      25. .  
      26. getValue  
      27. ();  
      28. }  

      實體代碼:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. EntryMapTest  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. Map  
      24. <  
      25. Integer  
      26. ,  
      27.   
      28. String  
      29. >  
      30. map  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37. map  
      38. .  
      39. put  
      40. (  
      41. 2  
      42. ,  
      43.   
      44. "jay"  
      45. );  
      46. map  
      47. .  
      48. put  
      49. (  
      50. 1  
      51. ,  
      52.   
      53. "whx"  
      54. );  
      55. map  
      56. .  
      57. put  
      58. (  
      59. 3  
      60. ,  
      61.   
      62. "huaxiao"  
      63. );  
      64.   
      65. for  
      66. (  
      67. Map  
      68. .  
      69. Entry  
      70. entry  
      71. :  
      72. map  
      73. .  
      74. entrySet  
      75. ())  
      76.   
      77. {  
      78.   
      79. // get key  
      80.   
      81. Integer  
      82. key  
      83. =  
      84.   
      85. (  
      86. Integer  
      87. )  
      88. entry  
      89. .  
      90. getKey  
      91. ();  
      92.   
      93. // get value  
      94.   
      95. String  
      96. value  
      97. =  
      98.   
      99. (  
      100. String  
      101. )  
      102. entry  
      103. .  
      104. getValue  
      105. ();  
      106.   
      107. System  
      108. .  
      109. out  
      110. .  
      111. println  
      112. (  
      113. "key:"  
      114. +  
      115. key  
      116. +  
      117. ",value:"  
      118. +  
      119. value  
      120. );  
      121.   
      122. }  
      123.   
      124. }  
      125. }  

      通過Iterator+while實作遍歷

      [plain] view plaincopy  
      1. Iterator  
      2. itr  
      3. =  
      4. map  
      5. .  
      6. entrySet  
      7. ().  
      8. iterator  
      9. ();  
      10. while  
      11. (  
      12. itr  
      13. .  
      14. hasNext  
      15. ())  
      16.   
      17. {  
      18.   
      19. Entry  
      20. entry  
      21. =  
      22. itr  
      23. .  
      24. next  
      25. ();  
      26.   
      27. // get key  
      28. K key  
      29. =  
      30. entry  
      31. .  
      32. getKey  
      33. ();  
      34.   
      35. // get value  
      36. V value  
      37. =  
      38. entry  
      39. .  
      40. getValue  
      41. ();  
      42. }  

      實體代碼:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. IteratorMapTest  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. Map  
      24. <  
      25. Integer  
      26. ,  
      27.   
      28. String  
      29. >  
      30. map  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37. map  
      38. .  
      39. put  
      40. (  
      41. 2  
      42. ,  
      43.   
      44. "jay"  
      45. );  
      46. map  
      47. .  
      48. put  
      49. (  
      50. 1  
      51. ,  
      52.   
      53. "whx"  
      54. );  
      55. map  
      56. .  
      57. put  
      58. (  
      59. 3  
      60. ,  
      61.   
      62. "huaxiao"  
      63. );  
      64.   
      65. Iterator  
      66. itr  
      67. =  
      68. map  
      69. .  
      70. entrySet  
      71. ().  
      72. iterator  
      73. ();  
      74.   
      75. while  
      76. (  
      77. itr  
      78. .  
      79. hasNext  
      80. ())  
      81.   
      82. {  
      83.   
      84. Map  
      85. .  
      86. Entry  
      87. entry  
      88. =  
      89.   
      90. (  
      91. Map  
      92. .  
      93. Entry  
      94. )  
      95. itr  
      96. .  
      97. next  
      98. ();  
      99.   
      100. // get key  
      101.   
      102. Integer  
      103. key  
      104. =  
      105.   
      106. (  
      107. Integer  
      108. )  
      109. entry  
      110. .  
      111. getKey  
      112. ();  
      113.   
      114. // get value  
      115.   
      116. String  
      117. value  
      118. =  
      119.   
      120. (  
      121. String  
      122. )  
      123. entry  
      124. .  
      125. getValue  
      126. ();  
      127.   
      128. System  
      129. .  
      130. out  
      131. .  
      132. println  
      133. (  
      134. "key:"  
      135. +  
      136. key  
      137. +  
      138. ",value:"  
      139. +  
      140. value  
      141. );  
      142.   
      143. }  
      144.   
      145. }  
      146. }  

      運行結果:

      [plain] view plaincopy  
      1. key  
      2. :  
      3. 1  
      4. ,  
      5. value  
      6. :  
      7. whx  
      8. key  
      9. :  
      10. 2  
      11. ,  
      12. value  
      13. :  
      14. jay  
      15. key  
      16. :  
      17. 3  
      18. ,  
      19. value  
      20. :  
      21. huaxiao  

      3、如何根據Map的keys進行排序

      對Map的keys進行排序,在日常開發很常見,主要有以下兩種方式實作,

      把Map.Entry放進list,再用Comparator對list進行排序

      [plain] view plaincopy  
      1. List  
      2. list  
      3. =  
      4.   
      5. new  
      6.   
      7. ArrayList  
      8. (  
      9. map  
      10. .  
      11. entrySet  
      12. ());  
      13. Collections  
      14. .  
      15. sort  
      16. (  
      17. list  
      18. ,  
      19.   
      20. (  
      21. Entry  
      22. e1  
      23. ,  
      24.   
      25. Entry  
      26. e2  
      27. )->  
      28.   
      29. {  
      30.   
      31. return  
      32. e1  
      33. .  
      34. getKey  
      35. ().  
      36. compareTo  
      37. (  
      38. e2  
      39. .  
      40. getKey  
      41. ());  
      42. });  

      實體代碼:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. SortKeysMapTest  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. Map  
      24. <  
      25. String  
      26. ,  
      27.   
      28. String  
      29. >  
      30. map  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37. map  
      38. .  
      39. put  
      40. (  
      41. "2010"  
      42. ,  
      43.   
      44. "jay"  
      45. );  
      46. map  
      47. .  
      48. put  
      49. (  
      50. "1999"  
      51. ,  
      52.   
      53. "whx"  
      54. );  
      55. map  
      56. .  
      57. put  
      58. (  
      59. "3010"  
      60. ,  
      61.   
      62. "huaxiao"  
      63. );  
      64.   
      65. List  
      66. <  
      67. Map  
      68. .  
      69. Entry  
      70. <  
      71. String  
      72. ,  
      73. String  
      74. >>  
      75. list  
      76. =  
      77.   
      78. new  
      79.   
      80. ArrayList  
      81. <>(  
      82. map  
      83. .  
      84. entrySet  
      85. ());  
      86.   
      87. Collections  
      88. .  
      89. sort  
      90. (  
      91. list  
      92. ,  
      93.   
      94. (  
      95. Map  
      96. .  
      97. Entry  
      98. e1  
      99. ,  
      100.   
      101. Map  
      102. .  
      103. Entry  
      104. e2  
      105. )->  
      106.   
      107. {  
      108.   
      109. return  
      110. e1  
      111. .  
      112. getKey  
      113. ().  
      114. toString  
      115. ().  
      116. compareTo  
      117. (  
      118. e2  
      119. .  
      120. getKey  
      121. ().  
      122. toString  
      123. ());  
      124.   
      125. });  
      126.   
      127. for  
      128.   
      129. (  
      130. Map  
      131. .  
      132. Entry  
      133. entry  
      134. :  
      135. list  
      136. )  
      137.   
      138. {  
      139.   
      140. System  
      141. .  
      142. out  
      143. .  
      144. println  
      145. (  
      146. "key:"  
      147.   
      148. +  
      149. entry  
      150. .  
      151. getKey  
      152. ()  
      153.   
      154. +  
      155.   
      156. ",value:"  
      157.   
      158. +  
      159. entry  
      160. .  
      161. getValue  
      162. ());  
      163.   
      164. }  
      165.   
      166. }  
      167. }  

      使用SortedMap+TreeMap+Comparator實作

      [plain] view plaincopy  
      1. SortedMap  
      2. sortedMap  
      3. =  
      4.   
      5. new  
      6.   
      7. TreeMap  
      8. (  
      9. new  
      10.   
      11. Comparator  
      12. ()  
      13.   
      14. {  
      15.   
      16. @Override  
      17.   
      18. public  
      19.   
      20. int  
      21. compare  
      22. (  
      23. K k1  
      24. ,  
      25. K k2  
      26. )  
      27.   
      28. {  
      29.   
      30. return  
      31. k1  
      32. .  
      33. compareTo  
      34. (  
      35. k2  
      36. );  
      37.   
      38. }  
      39. });  
      40. sortedMap  
      41. .  
      42. putAll  
      43. (  
      44. map  
      45. );  

      實體代碼:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. SortKeys2MapTest  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. Map  
      24. <  
      25. String  
      26. ,  
      27.   
      28. String  
      29. >  
      30. map  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37. map  
      38. .  
      39. put  
      40. (  
      41. "2010"  
      42. ,  
      43.   
      44. "jay"  
      45. );  
      46. map  
      47. .  
      48. put  
      49. (  
      50. "1999"  
      51. ,  
      52.   
      53. "whx"  
      54. );  
      55. map  
      56. .  
      57. put  
      58. (  
      59. "3010"  
      60. ,  
      61.   
      62. "huaxiao"  
      63. );  
      64.   
      65. SortedMap  
      66. sortedMap  
      67. =  
      68.   
      69. new  
      70.   
      71. TreeMap  
      72. (  
      73. new  
      74.   
      75. Comparator  
      76. <  
      77. String  
      78. >()  
      79.   
      80. {  
      81.   
      82. @Override  
      83.   
      84. public  
      85.   
      86. int  
      87. compare  
      88. (  
      89. String  
      90. k1  
      91. ,  
      92.   
      93. String  
      94. k2  
      95. )  
      96.   
      97. {  
      98.   
      99. return  
      100. k1  
      101. .  
      102. compareTo  
      103. (  
      104. k2  
      105. );  
      106.   
      107. }  
      108.   
      109. });  
      110. sortedMap  
      111. .  
      112. putAll  
      113. (  
      114. map  
      115. );  
      116.   
      117. Iterator  
      118. itr  
      119. =  
      120. sortedMap  
      121. .  
      122. entrySet  
      123. ().  
      124. iterator  
      125. ();  
      126.   
      127. while  
      128. (  
      129. itr  
      130. .  
      131. hasNext  
      132. ())  
      133.   
      134. {  
      135.   
      136. Map  
      137. .  
      138. Entry  
      139. entry  
      140. =  
      141.   
      142. (  
      143. Map  
      144. .  
      145. Entry  
      146. )  
      147. itr  
      148. .  
      149. next  
      150. ();  
      151.   
      152. // get key  
      153.   
      154. String  
      155. key  
      156. =  
      157.   
      158. (  
      159. String  
      160. )  
      161. entry  
      162. .  
      163. getKey  
      164. ();  
      165.   
      166. // get value  
      167.   
      168. String  
      169. value  
      170. =  
      171.   
      172. (  
      173. String  
      174. )  
      175. entry  
      176. .  
      177. getValue  
      178. ();  
      179.   
      180. System  
      181. .  
      182. out  
      183. .  
      184. println  
      185. (  
      186. "key:"  
      187. +  
      188. key  
      189. +  
      190. ",value:"  
      191. +  
      192. value  
      193. );  
      194.   
      195. }  
      196.   
      197. }  
      198. }  

      運行結果:

      [plain] view plaincopy  
      1. key  
      2. :  
      3. 1999  
      4. ,  
      5. value  
      6. :  
      7. whx  
      8. key  
      9. :  
      10. 2010  
      11. ,  
      12. value  
      13. :  
      14. jay  
      15. key  
      16. :  
      17. 3010  
      18. ,  
      19. value  
      20. :  
      21. huaxiao  

      4、如何對Map的values進行排序

      [plain] view plaincopy  
      1. List  
      2. list  
      3. =  
      4.   
      5. new  
      6.   
      7. ArrayList  
      8. (  
      9. map  
      10. .  
      11. entrySet  
      12. ());  
      13. Collections  
      14. .  
      15. sort  
      16. (  
      17. list  
      18. ,  
      19.   
      20. (  
      21. Entry  
      22. e1  
      23. ,  
      24.   
      25. Entry  
      26. e2  
      27. )  
      28.   
      29. ->{  
      30.   
      31. return  
      32. e1  
      33. .  
      34. getValue  
      35. ().  
      36. compareTo  
      37. (  
      38. e2  
      39. .  
      40. getValue  
      41. ());  
      42.   
      43. });  

      實體代碼:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. SortValuesMapTest  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. Map  
      24. <  
      25. String  
      26. ,  
      27.   
      28. String  
      29. >  
      30. map  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37. map  
      38. .  
      39. put  
      40. (  
      41. "2010"  
      42. ,  
      43.   
      44. "jay"  
      45. );  
      46. map  
      47. .  
      48. put  
      49. (  
      50. "1999"  
      51. ,  
      52.   
      53. "whx"  
      54. );  
      55. map  
      56. .  
      57. put  
      58. (  
      59. "3010"  
      60. ,  
      61.   
      62. "huaxiao"  
      63. );  
      64.   
      65. List  
      66.   
      67. <  
      68. Map  
      69. .  
      70. Entry  
      71. <  
      72. String  
      73. ,  
      74. String  
      75. >>  
      76. list  
      77. =  
      78.   
      79. new  
      80.   
      81. ArrayList  
      82. <>(  
      83. map  
      84. .  
      85. entrySet  
      86. ());  
      87.   
      88. Collections  
      89. .  
      90. sort  
      91. (  
      92. list  
      93. ,  
      94.   
      95. (  
      96. Map  
      97. .  
      98. Entry  
      99. e1  
      100. ,  
      101.   
      102. Map  
      103. .  
      104. Entry  
      105. e2  
      106. )->  
      107.   
      108. {  
      109.   
      110. return  
      111. e1  
      112. .  
      113. getValue  
      114. ().  
      115. toString  
      116. ().  
      117. compareTo  
      118. (  
      119. e2  
      120. .  
      121. getValue  
      122. ().  
      123. toString  
      124. ());  
      125.   
      126. }  
      127.   
      128. );  
      129.   
      130. for  
      131.   
      132. (  
      133. Map  
      134. .  
      135. Entry  
      136. entry  
      137. :  
      138. list  
      139. )  
      140.   
      141. {  
      142.   
      143. System  
      144. .  
      145. out  
      146. .  
      147. println  
      148. (  
      149. "key:"  
      150.   
      151. +  
      152. entry  
      153. .  
      154. getKey  
      155. ()  
      156.   
      157. +  
      158.   
      159. ",value:"  
      160.   
      161. +  
      162. entry  
      163. .  
      164. getValue  
      165. ());  
      166.   
      167. }  
      168.   
      169. }  
      170. }  

      運行結果:

      [plain] view plaincopy  
      1. key  
      2. :  
      3. 3010  
      4. ,  
      5. value  
      6. :  
      7. huaxiao  
      8. key  
      9. :  
      10. 2010  
      11. ,  
      12. value  
      13. :  
      14. jay  
      15. key  
      16. :  
      17. 1999  
      18. ,  
      19. value  
      20. :  
      21. whx  

      5、如何初始化一個靜態/不可變的Map

      初始化一個靜態不可變的map,單單static final+static代碼塊還是不行的,如下:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. Test1  
      6.   
      7. {  
      8.   
      9. private  
      10.   
      11. static  
      12.   
      13. final  
      14.   
      15. Map  
      16.   
      17. <  
      18. Integer  
      19. ,  
      20. String  
      21. >  
      22. map  
      23. ;  
      24.   
      25. static  
      26.   
      27. {  
      28. map  
      29. =  
      30.   
      31. new  
      32.   
      33. HashMap  
      34. <  
      35. Integer  
      36. ,  
      37.   
      38. String  
      39. >();  
      40. map  
      41. .  
      42. put  
      43. (  
      44. 1  
      45. ,  
      46.   
      47. "one"  
      48. );  
      49. map  
      50. .  
      51. put  
      52. (  
      53. 2  
      54. ,  
      55.   
      56. "two"  
      57. );  
      58.   
      59. }  
      60.   
      61. public  
      62.   
      63. static  
      64.   
      65. void  
      66. main  
      67. (  
      68. String  
      69. []  
      70. args  
      71. )  
      72.   
      73. {  
      74. map  
      75. .  
      76. put  
      77. (  
      78. 3  
      79. ,  
      80.   
      81. "three"  
      82. );  
      83.   
      84. Iterator  
      85. itr  
      86. =  
      87. map  
      88. .  
      89. entrySet  
      90. ().  
      91. iterator  
      92. ();  
      93.   
      94. while  
      95. (  
      96. itr  
      97. .  
      98. hasNext  
      99. ())  
      100.   
      101. {  
      102.   
      103. Map  
      104. .  
      105. Entry  
      106. entry  
      107. =  
      108.   
      109. (  
      110. Map  
      111. .  
      112. Entry  
      113. )  
      114. itr  
      115. .  
      116. next  
      117. ();  
      118.   
      119. // get key  
      120.   
      121. Integer  
      122. key  
      123. =  
      124.   
      125. (  
      126. Integer  
      127. )  
      128. entry  
      129. .  
      130. getKey  
      131. ();  
      132.   
      133. // get value  
      134.   
      135. String  
      136. value  
      137. =  
      138.   
      139. (  
      140. String  
      141. )  
      142. entry  
      143. .  
      144. getValue  
      145. ();  
      146.   
      147. System  
      148. .  
      149. out  
      150. .  
      151. println  
      152. (  
      153. "key:"  
      154. +  
      155. key  
      156. +  
      157. ",value:"  
      158. +  
      159. value  
      160. );  
      161.   
      162. }  
      163.   
      164. }  
      165. }  

      這里面,map繼續添加元素(3,"three"),發現是OK的,運行結果如下:

      [plain] view plaincopy  
      1. key  
      2. :  
      3. 1  
      4. ,  
      5. value  
      6. :  
      7. one  
      8. key  
      9. :  
      10. 2  
      11. ,  
      12. value  
      13. :  
      14. two  
      15. key  
      16. :  
      17. 3  
      18. ,  
      19. value  
      20. :  
      21. three  

      真正實作一個靜態不可變的map,需要Collections.unmodifiableMap,代碼如下:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. Test2  
      6.   
      7. {  
      8.   
      9. private  
      10.   
      11. static  
      12.   
      13. final  
      14.   
      15. Map  
      16. <  
      17. Integer  
      18. ,  
      19.   
      20. String  
      21. >  
      22. map  
      23. ;  
      24.   
      25. static  
      26.   
      27. {  
      28.   
      29. Map  
      30. <  
      31. Integer  
      32. ,  
      33. String  
      34. >  
      35. aMap  
      36. =  
      37.   
      38. new  
      39.   
      40. HashMap  
      41. <>();  
      42. aMap  
      43. .  
      44. put  
      45. (  
      46. 1  
      47. ,  
      48.   
      49. "one"  
      50. );  
      51. aMap  
      52. .  
      53. put  
      54. (  
      55. 2  
      56. ,  
      57.   
      58. "two"  
      59. );  
      60. map  
      61. =  
      62.   
      63. Collections  
      64. .  
      65. unmodifiableMap  
      66. (  
      67. aMap  
      68. );  
      69.   
      70. }  
      71.   
      72. public  
      73.   
      74. static  
      75.   
      76. void  
      77. main  
      78. (  
      79. String  
      80. []  
      81. args  
      82. )  
      83.   
      84. {  
      85. map  
      86. .  
      87. put  
      88. (  
      89. 3  
      90. ,  
      91.   
      92. "3"  
      93. );  
      94.   
      95. Iterator  
      96. itr  
      97. =  
      98. map  
      99. .  
      100. entrySet  
      101. ().  
      102. iterator  
      103. ();  
      104.   
      105. while  
      106. (  
      107. itr  
      108. .  
      109. hasNext  
      110. ())  
      111.   
      112. {  
      113.   
      114. Map  
      115. .  
      116. Entry  
      117. entry  
      118. =  
      119.   
      120. (  
      121. Map  
      122. .  
      123. Entry  
      124. )  
      125. itr  
      126. .  
      127. next  
      128. ();  
      129.   
      130. // get key  
      131.   
      132. Integer  
      133. key  
      134. =  
      135.   
      136. (  
      137. Integer  
      138. )  
      139. entry  
      140. .  
      141. getKey  
      142. ();  
      143.   
      144. // get value  
      145.   
      146. String  
      147. value  
      148. =  
      149.   
      150. (  
      151. String  
      152. )  
      153. entry  
      154. .  
      155. getValue  
      156. ();  
      157.   
      158. System  
      159. .  
      160. out  
      161. .  
      162. println  
      163. (  
      164. "key:"  
      165. +  
      166. key  
      167. +  
      168. ",value:"  
      169. +  
      170. value  
      171. );  
      172.   
      173. }  
      174.   
      175. }  
      176.   
      177. }  

      運行結果如下:

      可以發現,繼續往map添加元素是會報錯的,實作真正不可變的map,

      6、HashMap, TreeMap, and Hashtable,ConcurrentHashMap的區別

      HashMap TreeMap Hashtable ConcurrentHashMap
      有序性 否 是 否 否
      null k-v 是-是 否-是 否-否 否-否
      線性安全 否 否 是 是
      時間復雜度 O(1) O(log n) O(1) O(log n)
      底層結構 陣列+鏈表 紅黑樹 陣列+鏈表 紅黑樹

      7、如何創建一個空map

      如果map是不可變的,可以這樣創建:

      [plain] view plaincopy  
      1. Map  
      2. map  
      3. =  
      4. Collections  
      5. .  
      6. emptyMap  
      7. ();  
      8. or  
      9. Map  
      10. <  
      11. String  
      12. ,  
      13. String  
      14. >  
      15. map  
      16. =  
      17. Collections  
      18. .<  
      19. String  
      20. ,  
      21.   
      22. String  
      23. >  
      24. emptyMap  
      25. ();  
      26. //map1.put("1", "1"); 運行出錯  

      如果你希望你的空map可以添加元素的,可以這樣創建

      [plain] view plaincopy  
      1. Map  
      2. map  
      3. =  
      4.   
      5. new  
      6.   
      7. HashMap  
      8. ();  

      8、有關于map的復制

      有關于hashmap的復制,在日常開發中,使用也比較多,主要有 =,clone,putAll,但是他們都是淺復制,使用的時候注意啦,可以看一下以下例子:

      例子一,使用=復制一個map:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. CopyMapAssignTest  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. Map  
      24. <  
      25. Integer  
      26. ,  
      27.   
      28. User  
      29. >  
      30. userMap  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37.   
      38. userMap  
      39. .  
      40. put  
      41. (  
      42. 1  
      43. ,  
      44.   
      45. new  
      46.   
      47. User  
      48. (  
      49. "jay"  
      50. ,  
      51.   
      52. 26  
      53. ));  
      54. userMap  
      55. .  
      56. put  
      57. (  
      58. 2  
      59. ,  
      60.   
      61. new  
      62.   
      63. User  
      64. (  
      65. "fany"  
      66. ,  
      67.   
      68. 25  
      69. ));  
      70.   
      71. //Shallow clone  
      72.   
      73. Map  
      74. <  
      75. Integer  
      76. ,  
      77.   
      78. User  
      79. >  
      80. clonedMap  
      81. =  
      82. userMap  
      83. ;  
      84.   
      85. //Same as userMap  
      86.   
      87. System  
      88. .  
      89. out  
      90. .  
      91. println  
      92. (  
      93. clonedMap  
      94. );  
      95.   
      96. System  
      97. .  
      98. out  
      99. .  
      100. println  
      101. (  
      102. "\nChanges reflect in both maps \n"  
      103. );  
      104.   
      105. //Change a value is clonedMap  
      106. clonedMap  
      107. .  
      108. get  
      109. (  
      110. 1  
      111. ).  
      112. setName  
      113. (  
      114. "test"  
      115. );  
      116.   
      117. //Verify content of both maps  
      118.   
      119. System  
      120. .  
      121. out  
      122. .  
      123. println  
      124. (  
      125. userMap  
      126. );  
      127.   
      128. System  
      129. .  
      130. out  
      131. .  
      132. println  
      133. (  
      134. clonedMap  
      135. );  
      136.   
      137. }  
      138. }  

      運行結果:

      [plain] view plaincopy  
      1. {  
      2. 1  
      3. =  
      4. User  
      5. {  
      6. name  
      7. =  
      8. 'jay'  
      9. ,  
      10. age  
      11. =  
      12. 26  
      13. },  
      14.   
      15. 2  
      16. =  
      17. User  
      18. {  
      19. name  
      20. =  
      21. 'fany'  
      22. ,  
      23. age  
      24. =  
      25. 25  
      26. }}  
      27.   
      28. Changes  
      29. reflect  
      30. in  
      31. both maps  
      32.   
      33. {  
      34. 1  
      35. =  
      36. User  
      37. {  
      38. name  
      39. =  
      40. 'test'  
      41. ,  
      42. age  
      43. =  
      44. 26  
      45. },  
      46.   
      47. 2  
      48. =  
      49. User  
      50. {  
      51. name  
      52. =  
      53. 'fany'  
      54. ,  
      55. age  
      56. =  
      57. 25  
      58. }}  
      59. {  
      60. 1  
      61. =  
      62. User  
      63. {  
      64. name  
      65. =  
      66. 'test'  
      67. ,  
      68. age  
      69. =  
      70. 26  
      71. },  
      72.   
      73. 2  
      74. =  
      75. User  
      76. {  
      77. name  
      78. =  
      79. 'fany'  
      80. ,  
      81. age  
      82. =  
      83. 25  
      84. }}  

      從運行結果看出,對cloneMap修改,兩個map都改變了,所以=是淺復制,

      例子二,使用hashmap的clone復制:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. CopyCloneMapTest  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. HashMap  
      24. <  
      25. Integer  
      26. ,  
      27.   
      28. User  
      29. >  
      30. userMap  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37.   
      38. userMap  
      39. .  
      40. put  
      41. (  
      42. 1  
      43. ,  
      44.   
      45. new  
      46.   
      47. User  
      48. (  
      49. "jay"  
      50. ,  
      51.   
      52. 26  
      53. ));  
      54. userMap  
      55. .  
      56. put  
      57. (  
      58. 2  
      59. ,  
      60.   
      61. new  
      62.   
      63. User  
      64. (  
      65. "fany"  
      66. ,  
      67.   
      68. 25  
      69. ));  
      70.   
      71. //Shallow clone  
      72.   
      73. HashMap  
      74. <  
      75. Integer  
      76. ,  
      77.   
      78. User  
      79. >  
      80. clonedMap  
      81. =  
      82.   
      83. (  
      84. HashMap  
      85. <  
      86. Integer  
      87. ,  
      88.   
      89. User  
      90. >)  
      91. userMap  
      92. .  
      93. clone  
      94. ();  
      95.   
      96. //Same as userMap  
      97.   
      98. System  
      99. .  
      100. out  
      101. .  
      102. println  
      103. (  
      104. clonedMap  
      105. );  
      106.   
      107. System  
      108. .  
      109. out  
      110. .  
      111. println  
      112. (  
      113. "\nChanges reflect in both maps \n"  
      114. );  
      115.   
      116. //Change a value is clonedMap  
      117. clonedMap  
      118. .  
      119. get  
      120. (  
      121. 1  
      122. ).  
      123. setName  
      124. (  
      125. "test"  
      126. );  
      127.   
      128. //Verify content of both maps  
      129.   
      130. System  
      131. .  
      132. out  
      133. .  
      134. println  
      135. (  
      136. userMap  
      137. );  
      138.   
      139. System  
      140. .  
      141. out  
      142. .  
      143. println  
      144. (  
      145. clonedMap  
      146. );  
      147.   
      148. }  
      149. }  

      運行結果:

      [plain] view plaincopy  
      1. {  
      2. 1  
      3. =  
      4. User  
      5. {  
      6. name  
      7. =  
      8. 'jay'  
      9. ,  
      10. age  
      11. =  
      12. 26  
      13. },  
      14.   
      15. 2  
      16. =  
      17. User  
      18. {  
      19. name  
      20. =  
      21. 'fany'  
      22. ,  
      23. age  
      24. =  
      25. 25  
      26. }}  
      27.   
      28. Changes  
      29. reflect  
      30. in  
      31. both maps  
      32.   
      33. {  
      34. 1  
      35. =  
      36. User  
      37. {  
      38. name  
      39. =  
      40. 'test'  
      41. ,  
      42. age  
      43. =  
      44. 26  
      45. },  
      46.   
      47. 2  
      48. =  
      49. User  
      50. {  
      51. name  
      52. =  
      53. 'fany'  
      54. ,  
      55. age  
      56. =  
      57. 25  
      58. }}  
      59. {  
      60. 1  
      61. =  
      62. User  
      63. {  
      64. name  
      65. =  
      66. 'test'  
      67. ,  
      68. age  
      69. =  
      70. 26  
      71. },  
      72.   
      73. 2  
      74. =  
      75. User  
      76. {  
      77. name  
      78. =  
      79. 'fany'  
      80. ,  
      81. age  
      82. =  
      83. 25  
      84. }}  

      從運行結果看出,對cloneMap修改,兩個map都改變了,所以hashmap的clone也是淺復制,

      例子三,通過putAll操作

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. CopyPutAllMapTest  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. HashMap  
      24. <  
      25. Integer  
      26. ,  
      27.   
      28. User  
      29. >  
      30. userMap  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37.   
      38. userMap  
      39. .  
      40. put  
      41. (  
      42. 1  
      43. ,  
      44.   
      45. new  
      46.   
      47. User  
      48. (  
      49. "jay"  
      50. ,  
      51.   
      52. 26  
      53. ));  
      54. userMap  
      55. .  
      56. put  
      57. (  
      58. 2  
      59. ,  
      60.   
      61. new  
      62.   
      63. User  
      64. (  
      65. "fany"  
      66. ,  
      67.   
      68. 25  
      69. ));  
      70.   
      71. //Shallow clone  
      72.   
      73. HashMap  
      74. <  
      75. Integer  
      76. ,  
      77.   
      78. User  
      79. >  
      80. clonedMap  
      81. =  
      82.   
      83. new  
      84.   
      85. HashMap  
      86. <>();  
      87. clonedMap  
      88. .  
      89. putAll  
      90. (  
      91. userMap  
      92. );  
      93.   
      94. //Same as userMap  
      95.   
      96. System  
      97. .  
      98. out  
      99. .  
      100. println  
      101. (  
      102. clonedMap  
      103. );  
      104.   
      105. System  
      106. .  
      107. out  
      108. .  
      109. println  
      110. (  
      111. "\nChanges reflect in both maps \n"  
      112. );  
      113.   
      114. //Change a value is clonedMap  
      115. clonedMap  
      116. .  
      117. get  
      118. (  
      119. 1  
      120. ).  
      121. setName  
      122. (  
      123. "test"  
      124. );  
      125.   
      126. //Verify content of both maps  
      127.   
      128. System  
      129. .  
      130. out  
      131. .  
      132. println  
      133. (  
      134. userMap  
      135. );  
      136.   
      137. System  
      138. .  
      139. out  
      140. .  
      141. println  
      142. (  
      143. clonedMap  
      144. );  
      145.   
      146. }  
      147. }  

      運行結果:

      [plain] view plaincopy  
      1. {  
      2. 1  
      3. =  
      4. User  
      5. {  
      6. name  
      7. =  
      8. 'jay'  
      9. ,  
      10. age  
      11. =  
      12. 26  
      13. },  
      14.   
      15. 2  
      16. =  
      17. User  
      18. {  
      19. name  
      20. =  
      21. 'fany'  
      22. ,  
      23. age  
      24. =  
      25. 25  
      26. }}  
      27.   
      28. Changes  
      29. reflect  
      30. in  
      31. both maps  
      32.   
      33. {  
      34. 1  
      35. =  
      36. User  
      37. {  
      38. name  
      39. =  
      40. 'test'  
      41. ,  
      42. age  
      43. =  
      44. 26  
      45. },  
      46.   
      47. 2  
      48. =  
      49. User  
      50. {  
      51. name  
      52. =  
      53. 'fany'  
      54. ,  
      55. age  
      56. =  
      57. 25  
      58. }}  
      59. {  
      60. 1  
      61. =  
      62. User  
      63. {  
      64. name  
      65. =  
      66. 'test'  
      67. ,  
      68. age  
      69. =  
      70. 26  
      71. },  
      72.   
      73. 2  
      74. =  
      75. User  
      76. {  
      77. name  
      78. =  
      79. 'fany'  
      80. ,  
      81. age  
      82. =  
      83. 25  
      84. }}  

      從運行結果看出,對cloneMap修改,兩個map都改變了,所以putAll還是淺復制,

      那么,如何實作深度復制呢?

      可以使用序列化實作,如下為谷歌Gson序列化HashMap,實作深度復制的例子:

      [plain] view plaincopy  
      1. public  
      2.   
      3. class  
      4.   
      5. CopyDeepMapTest  
      6.   
      7. {  
      8.   
      9. public  
      10.   
      11. static  
      12.   
      13. void  
      14. main  
      15. (  
      16. String  
      17. []  
      18. args  
      19. )  
      20.   
      21. {  
      22.   
      23. HashMap  
      24. <  
      25. Integer  
      26. ,  
      27.   
      28. User  
      29. >  
      30. userMap  
      31. =  
      32.   
      33. new  
      34.   
      35. HashMap  
      36. <>();  
      37.   
      38. userMap  
      39. .  
      40. put  
      41. (  
      42. 1  
      43. ,  
      44.   
      45. new  
      46.   
      47. User  
      48. (  
      49. "jay"  
      50. ,  
      51.   
      52. 26  
      53. ));  
      54. userMap  
      55. .  
      56. put  
      57. (  
      58. 2  
      59. ,  
      60.   
      61. new  
      62.   
      63. User  
      64. (  
      65. "fany"  
      66. ,  
      67.   
      68. 25  
      69. ));  
      70.   
      71. //Shallow clone  
      72.   
      73. Gson  
      74. gson  
      75. =  
      76.   
      77. new  
      78.   
      79. Gson  
      80. ();  
      81.   
      82. String  
      83. jsonString  
      84. =  
      85. gson  
      86. .  
      87. toJson  
      88. (  
      89. userMap  
      90. );  
      91.   
      92. Type  
      93. type  
      94. =  
      95.   
      96. new  
      97.   
      98. TypeToken  
      99. <  
      100. HashMap  
      101. <  
      102. Integer  
      103. ,  
      104.   
      105. User  
      106. >>(){}.  
      107. getType  
      108. ();  
      109.   
      110. HashMap  
      111. <  
      112. Integer  
      113. ,  
      114.   
      115. User  
      116. >  
      117. clonedMap  
      118. =  
      119. gson  
      120. .  
      121. fromJson  
      122. (  
      123. jsonString  
      124. ,  
      125. type  
      126. );  
      127.   
      128. //Same as userMap  
      129.   
      130. System  
      131. .  
      132. out  
      133. .  
      134. println  
      135. (  
      136. clonedMap  
      137. );  
      138.   
      139. System  
      140. .  
      141. out  
      142. .  
      143. println  
      144. (  
      145. "\nChanges reflect in only one map \n"  
      146. );  
      147.   
      148. //Change a value is clonedMap  
      149. clonedMap  
      150. .  
      151. get  
      152. (  
      153. 1  
      154. ).  
      155. setName  
      156. (  
      157. "test"  
      158. );  
      159.   
      160. //Verify content of both maps  
      161.   
      162. System  
      163. .  
      164. out  
      165. .  
      166. println  
      167. (  
      168. userMap  
      169. );  
      170.   
      171. System  
      172. .  
      173. out  
      174. .  
      175. println  
      176. (  
      177. clonedMap  
      178. );  
      179.   
      180. }  
      181. }  

      運行結果:

      [plain] view plaincopy  
      1. {  
      2. 1  
      3. =  
      4. User  
      5. {  
      6. name  
      7. =  
      8. 'jay'  
      9. ,  
      10. age  
      11. =  
      12. 26  
      13. },  
      14.   
      15. 2  
      16. =  
      17. User  
      18. {  
      19. name  
      20. =  
      21. 'fany'  
      22. ,  
      23. age  
      24. =  
      25. 25  
      26. }}  
      27.   
      28. Changes  
      29. reflect  
      30. in  
      31. only one map  
      32.   
      33. {  
      34. 1  
      35. =  
      36. User  
      37. {  
      38. name  
      39. =  
      40. 'jay'  
      41. ,  
      42. age  
      43. =  
      44. 26  
      45. },  
      46.   
      47. 2  
      48. =  
      49. User  
      50. {  
      51. name  
      52. =  
      53. 'fany'  
      54. ,  
      55. age  
      56. =  
      57. 25  
      58. }}  
      59. {  
      60. 1  
      61. =  
      62. User  
      63. {  
      64. name  
      65. =  
      66. 'test'  
      67. ,  
      68. age  
      69. =  
      70. 26  
      71. },  
      72.   
      73. 2  
      74. =  
      75. User  
      76. {  
      77. name  
      78. =  
      79. 'fany'  
      80. ,  
      81. age  
      82. =  
      83. 25  
      84. }}  

      從運行結果看出,對cloneMap修改,userMap沒有被改變,所以是深度復制

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/206409.html

標籤:Java

上一篇:經典Java面試寶典之Java全套技術知識收藏吃灰系列大全!

下一篇:pytest快速入門1-安裝和開始

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more