黑马程序员——Map集合
2015-08-12 10:04
507 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------1、Map(1)Map是一个键值对形式的集合;键和值必须成对出现。 最大优点:体现对应关系(一一对应关系) (2)Map的功能: 注意:Map集合中的具体实现类的数据结构,针对的是键。 A:增加功能。 V put(K key, V value) 向集合中添加键值对 如果该键存在,则返回被替换的值 如果该键不存在则直接添加返回null B:删除功能。 void clear() 清空集合中所有数据 V remove( Object key ) 根据键删除键值对元素 C:判断功能。 boolean containsKey( Object key ) 判断集合中是否包含指定的键 boolean containsValue( Object value ) 判断集合中是否包含指定的值 boolean isEmpty() 判断集合是否为空 D:获取功能。 Set<Map.Entry<K,V>> entrySet() 获取键值对儿对象的集合 Object get( Object key ) 根据键获取值 Set<K> keySet(): 获取集合中所有键的Set集合 Collection<V> values() 获取集合中所有值的集合 E:长度功能。 int size() 获取集合的长度(3)Map的两种遍历方式 A:丈夫找妻子 a:把所有丈夫给集合起来。Set<K> ketSet() b:遍历丈夫集合,获取到每一个丈夫。增强for , 迭代器 c:让丈夫去找妻子。get(Object key) B:根据结婚证找丈夫和妻子 a:获取所有结婚证的集合。Set<> entrySet() b:遍历结婚证集合,获取到每一个结婚证对象。迭代器,增强for c:通过结婚证对象获取丈夫和妻子getKey()和getValue()2、HashMap HashMap自定义对象当做键 ,为什么要重写hashCode()方法和equals()方法? 因为如果用自定义对象当做键的话,要保持元素的唯一性(因为键是唯一的) ,HashMap通过名字可以看出他是 哈希结构,所以如果想要保持元素的唯一性需要重写这两个方法.案例:package com.map;
//学生类 public class Student { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(String name, int age) { super(); this.name = name; this.age = age; } public Student() { super(); }
//重写hashCode()方法@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}
//重写 equals 方法@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}
package com.map;import java.util.HashMap;import java.util.Set;
public class HashMapStu {public static void main(String[] args) {HashMap<Student, String> hm = new HashMap<Student, String>();
//添加学生hm.put(new Student("宿命", 24), "001");hm.put(new Student("王林", 34), "002");hm.put(new Student("王林", 32), "002");hm.put(new Student("孟浩", 18), "003");hm.put(new Student("孟浩", 18), "003");
//遍历学生Set<Student> set = hm.keySet();for(Student stu :set){System.out.println(hm.get(stu)+" "+stu.getName()+"-->"+stu.getAge());}}}3、TreeMap TreeMap自定义对象做键,需要做以下两个操作之一: 实现排序方式一:让对象所属的类去实现Comparable接口 实现排序方式二:用TreeMap的带参构造,在参数位置接收 Comparator 接口对象.案例:便利、排序、去重自定义对象package com.map;import java.util.Comparator;import java.util.Hashtable;import java.util.Set;import java.util.TreeMap;/** 创建一个TreeMap,存储5对元素,,字符串做为键,Student做为值.然后遍历集合.* 用自定义对象做键,String做值*/public class TreeMapTest {/*** @param args*/public static void main(String[] args) {TreeMap<Student, String> tm = new TreeMap<Student, String>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {// 按照年龄排序int num = s1.getAge() - s2.getAge();// 年龄同 ,比姓名int num2 = (num == 0) ? (s1.getName().compareTo(s2.getName())) : num;return num2;}});tm.put(new Student("宿命", 24), "001");tm.put(new Student("王林", 34), "002");tm.put(new Student("王林", 32), "002");tm.put(new Student("孟浩", 18), "003");tm.put(new Student("孟浩", 18), "003");Set<Student> set = tm.keySet();for (Student stu : set) {String name = stu.getName();int age = stu.getAge();String value = tm.get(stu);System.out.println(name + " " + age + " " + value);}Hashtable<String,String> hh = new Hashtable<String, String>();System.out.println(hh);}}4、Map和Collection的区别?(面试题) A:Map 是由键值对组成的集合,Map的键(key)是唯一的,值(value)可以重复。 B:Collection 是有单列数据组成的集合,它的儿子List是可以重复的,Set是唯一的。 5、HashMap和Hashtable的区别?(面试题) HashMap:线程不安全,效率高。允许null键和值。 Hashtable:线程安全,效率低。不允许null键和值。4:案例(1)统计字符串中每个字符出现的次数。package com.map;import java.util.HashMap;import java.util.Set;/** 有一个字符串: "cbxzbvavdvgd"* 要求获取字符串中,每一个字母出现次数:* "a(1)b(2)c(1)d(2)g(1)v(3)x(1)z(1)"*/public class TotalCharNum {public static void main(String[] args) {String str = "cbxzbvavdvgd";// 把字符串转换为字符数组char[] chs = str.toCharArray();// 定义TreeMap 集合HashMap<Character, Integer> tm = new HashMap<Character, Integer>();// 遍历字符数组,获取每个字符,并判断TreeMap 集合中是否存在for (char ch : chs) {boolean flag = tm.containsKey(ch);if (flag == false) {tm.put(ch, 1);} else {tm.put(ch, tm.get(ch) + 1);}}StringBuffer sb = new StringBuffer();Set<Character> set = tm.keySet();for (Character ch : set) {sb.append(ch).append("(").append(tm.get(ch)).append(")");}String st = sb.toString();System.out.println(st);}}(2)HashMap嵌套HashMap的使用。 package com.map;import java.util.HashMap;import java.util.Set;//HashMap嵌套HashMap的使用/** hm : bj jcb* jyb** jcb 001 xiaoming* 002 xiaohong* jyb 001 hh* 002 oo*/public class HashMapAndHashMap {/*** @param args*/public static void main(String[] args) {// 创建hm集合HashMap<String, HashMap<String, String>> hm = new HashMap<String, HashMap<String, String>>();// jcb 集合HashMap<String, String> jcb = new HashMap<String, String>();jcb.put("001", "xiaoming");jcb.put("002", "xiaohong");// jyb 集合HashMap<String, String> jyb = new HashMap<String, String>();jyb.put("001", "dabai");jyb.put("002", "xiaobai");// hm 集合添加元素hm.put("jcb", jcb);hm.put("jyb", jyb);// System.out.println(hm);// 遍历Set<String> bjs = hm.keySet();for (String bj : bjs) {HashMap<String, String> banJi = hm.get(bj);System.out.println(bj);Set<String> xh = banJi.keySet();for (String xs : xh) {String name = banJi.get(xs);System.out.println(xs + "-->" + name);}}}}------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
相关文章推荐
- 什么样的程序员最易涨薪?
- 在国内程序员是吃青春饭的职业吗?
- 九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)
- 程序员屌丝的出路在哪?
- 十月上旬百度,阿里巴巴,迅雷搜狗最新面试七十题(第201-270题)
- 九月腾讯,创新工场,淘宝等公司最新面试三十题(第171-200题)
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- 海量数据处理面试题集锦
- 十道海量数据处理面试题与十个方法大总结
- 全新整理:微软、Google等公司的面试题及解答、第161-170题
- 全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题]
- 面试中的链表题目
- 黑马程序员——Java基础多线程
- 黑马程序员——Java基础多态、内部类、异常
- 程序员如何持续提升自己的开发技能
- 黑马程序员——Java基础继承、抽象、接口
- 黑马程序员——Java基础面向对象
- 黑马程序员——Set实现类、Collections工具类
- 黑马程序员——java基础——集合框架
- 面试题4