(java总结)Map集合

快来打我* 2023-05-30 10:47 76阅读 0赞
  1. package Demo33;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. /*
  5. java.util.Map<K,V>集合
  6. Map的特点:
  7. 1、Map集合是一个双列集合,一个元素包含俩个值()
  8. 2、Map集合中的元素,key和value的数据类型可以相同,可以不同
  9. 3、Map集合中的元素,key是不允许重复的,value是可以重复的
  10. 4、Map集合中的元素,key和value是意义对应的
  11. java.util.HashMap<K,V>集合 implements Map<K,V>接口
  12. HashMap集合的特点:
  13. 1、HashMap集合底层是哈希表,查询速度特别的快
  14. 数组+单向列表/红黑树(链表的长度超过8):提高查询速度
  15. 2、hashMap集合是一个无需的集合,在存储元素和取出元素的顺序肯呢个不一致
  16. java.util.LinkedHashMap<K,V>集合 extends HashMap<K,V>集合
  17. LinkedHashMap的特点:
  18. 1、LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
  19. 2、LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一样的
  20. */
  21. public class CollectionMap {
  22. public static void main(String[] args) {
  23. show1();
  24. show2();
  25. show3();
  26. }
  27. private static void show3() {
  28. Map<String, String> map2 = new HashMap<>();
  29. map2.put("杨过","小龙女");
  30. map2.put("杨逍","纪晓芙");
  31. map2.put("张无忌","赵敏");
  32. String s3 = map2.get("杨过");
  33. System.out.println("s3" + s3);
  34. }
  35. /*public V put(K key, V value):把指定的键与值添加到Map集合中
  36. 返回值:V
  37. 存储键值对的时候,key不重复,返回的v是null
  38. 存储键值对的时候,key不重复,会使用新的value替换map中重复的value,返回被替换的value
  39. */
  40. private static void show1() {
  41. //创建Map集合的对象
  42. Map<String, String> map = new HashMap<>();
  43. //集合中没有和沉香一样的,就返回空
  44. String v1 = map.put("沉香", "小玉1");//null
  45. System.out.println(v1);
  46. System.out.println(map);
  47. System.out.println("=================");
  48. String v2 = map.put("沉香", "小玉2");
  49. //会使用新的value替换map中重复的value,返回被替换的value
  50. System.out.println(v2);//小玉1
  51. System.out.println(map);
  52. System.out.println("===================");
  53. }
  54. private static void show2() {
  55. Map<String, String> map1 = new HashMap<>();
  56. map1.put("杨过","小龙女");
  57. map1.put("杨逍","纪晓芙");
  58. map1.put("张无忌","赵敏");
  59. System.out.println(map1);
  60. //有键值对就删除,并返回对应的value,没有就返回null
  61. String s1 = map1.remove("杨过");
  62. System.out.println("s1"+s1);
  63. }
  64. }
  65. package Demo33;
  66. import java.util.HashMap;
  67. import java.util.Iterator;
  68. import java.util.Map;
  69. import java.util.Set;
  70. /*
  71. Map集合中的第一种遍历方式: 通过键找值set<K> keySet()
  72. Map集合中的方法:
  73. set<K> keySet() 返回此映射中包含的键的set视图
  74. 实现步骤:
  75. 1、使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
  76. 2、遍历Set集合,获取Map集合中的每一个Key
  77. 3、通过Map集合中的方法get(Key),通过key找value
  78. */
  79. public class DemoKeySet {
  80. public static void main(String[] args) {
  81. //创建Map集合对象
  82. Map<String, Integer> map = new HashMap<>();
  83. map.put("赵丽颖",168);
  84. map.put("张天爱",178);
  85. map.put("王丽坤",188);
  86. //1、使用Map集合中的方法keySet,把Map集合所有的key取出来,存储到一个Set集合中
  87. Set<String> set = map.keySet();
  88. //2、遍历Set集合,获取Map集合中的每一个Key
  89. Iterator<String> it = set.iterator();
  90. while(it.hasNext()){
  91. String key = it.next();
  92. //3、通过Map集合中的方法get(Key),通过key找value
  93. Integer value = map.get(key);
  94. System.out.println(key + value);
  95. }
  96. System.out.println("=================");
  97. for (String key : map.keySet()) {
  98. Integer value = map.get(key);
  99. System.out.println(key + value);
  100. }
  101. }
  102. }
  103. package Demo33;
  104. import java.util.HashMap;
  105. import java.util.Iterator;
  106. import java.util.Map;
  107. import java.util.Set;
  108. /*
  109. Map集合遍历第二种方式:
  110. Map集合的方法:
  111. Set<Map.Entry<K,V>> entrySet() 返回此映射包含的映射管的的set视图
  112. 实现步骤:
  113. 1、使用Map集合中的方法entrySet(), 把Map集合中多个Entry对象取出来,存储到一个set集合中
  114. 2、使用Set集合,获取每一个Entry对象
  115. 3、使用Entry对象中的方法getKey()和getValue获取键与值
  116. */
  117. public class DemoEntrySet {
  118. public static void main(String[] args) {
  119. Map<String, Integer> map = new HashMap<>();
  120. map.put("赵丽颖",168);
  121. map.put("张天爱",178);
  122. map.put("王丽坤",188);
  123. //1、使用Map集合中的方法entrySet(), 把Map集合中多个Entry对象取出来,存储到一个set集合中
  124. Set<Map.Entry<String, Integer>> set = map.entrySet();
  125. // 2、遍历Set集合,获取每一个Entry对象
  126. //使用迭代器遍历Set集合
  127. Iterator<Map.Entry<String, Integer>> it = set.iterator();
  128. while (it.hasNext()){
  129. Map.Entry<String, Integer> entry = it.next();
  130. //3、使用Entry对象中的方法getKey()和getValue()获取键与值
  131. String key = entry.getKey();
  132. Integer value = entry.getValue();
  133. System.out.println(key + value);
  134. }
  135. System.out.println("==================");
  136. for (Map.Entry<String, Integer> entry : set) {
  137. String key = entry.getKey();
  138. Integer value = entry.getValue();
  139. System.out.println(key+value);
  140. }
  141. }
  142. }
  143. package Demo33;
  144. import java.util.HashMap;
  145. import java.util.Map;
  146. import java.util.Set;
  147. public class DemoHashMapSavePerson {
  148. public static void main(String[] args) {
  149. show1();
  150. System.out.println("==================");
  151. show2();
  152. }
  153. /* HashMap存储自定义类型键值
  154. key:Person类型
  155. Person类型自己重写了hashCode方法和equals方法,尅保证key唯一
  156. value: String类型
  157. */
  158. private static void show2() {
  159. HashMap<Person, String> map = new HashMap<>();
  160. map.put(new Person("女王",18),"英国");
  161. map.put(new Person("秦始皇",18),"秦国");
  162. map.put(new Person("普京",18),"俄罗斯");
  163. map.put(new Person("女王",18),"毛里求斯");
  164. //使用entrySet
  165. Set<Map.Entry<Person, String>> set = map.entrySet();
  166. for (Map.Entry<Person, String> entry : set) {
  167. Person key = entry.getKey();
  168. String value = entry.getValue();
  169. System.out.println(key + value);
  170. }
  171. }
  172. /*
  173. HashMap存储自定义类型键值
  174. key: String类型
  175. String类型重写了hashCode方法和equals方法,尅保证key唯一
  176. value: Person类型
  177. value可以重复
  178. */
  179. private static void show1() {
  180. //K是字符串 V是Person
  181. //字符串重写了toString方法
  182. HashMap<String, Person> map = new HashMap<>();
  183. map.put("北京",new Person("张三",18));
  184. map.put("上海",new Person("李四",19));
  185. map.put("广州",new Person("王五",17));
  186. map.put("北京",new Person("赵六",16));
  187. //使用keySet
  188. Set<String> set = map.keySet();
  189. for (String key : set) {
  190. Person value = map.get(key);
  191. System.out.println(key + value);
  192. }
  193. }
  194. }
  195. package Demo33;
  196. import java.util.Objects;
  197. public class Person {
  198. private String name;
  199. private int age;
  200. public Person() {
  201. }
  202. public Person(String name, int age) {
  203. this.name = name;
  204. this.age = age;
  205. }
  206. public String getName() {
  207. return name;
  208. }
  209. @Override
  210. public String toString() {
  211. return "Person{" +
  212. "name='" + name + '\'' +
  213. ", age=" + age +
  214. '}';
  215. }
  216. @Override
  217. public boolean equals(Object o) {
  218. if (this == o) return true;
  219. if (o == null || getClass() != o.getClass()) return false;
  220. Person person = (Person) o;
  221. return age == person.age &&
  222. Objects.equals(name, person.name);
  223. }
  224. @Override
  225. public int hashCode() {
  226. return Objects.hash(name, age);
  227. }
  228. public void setName(String name) {
  229. this.name = name;
  230. }
  231. public int getAge() {
  232. return age;
  233. }
  234. public void setAge(int age) {
  235. this.age = age;
  236. }
  237. }
  238. package Demo33;
  239. import java.util.HashMap;
  240. import java.util.LinkedHashMap;
  241. /*
  242. java.util.LinkedHashMap<K,V> extends HashMap<K,V>
  243. Map接口的哈希表和链接列表实现,具有可预知的迭代顺着
  244. 底层原理:
  245. 哈希表+链表(记录元素顺序)
  246. */
  247. public class DemoLinkedHashMap {
  248. public static void main(String[] args) {
  249. HashMap<String,String> map = new LinkedHashMap<>();
  250. map.put("a","a");
  251. map.put("c","c");
  252. map.put("b","b");
  253. map.put("a","d");
  254. System.out.println(map);//key不允许重复,有序的
  255. }
  256. }

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Map集合 总结

    (本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教,谢谢。) Java的集合类可分为Set、List、Map、Queue,其中Set、L