黑马程序员---Java基础---双列集合Map(接口)
2015-12-16 10:50
681 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、Map接口概述:
双列集合:在存储时,同时指定两个字段;一个做"键",一个做"值"(键值对)
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构值针对键有效,跟值无关
Collection集合的数据结构是针对元素有效
二、Map接口成员方法:
V put(K key,V value) :向集合中添加"键值对",如果发生重复的键,将用新值替换原值,并将原值返回;
V remove(Object key):移除key所指定的"键值对"
void clear():清空集合
boolean containsKey(Object key):判断是否包含指定key
boolean containsValue(Object value):判断是否包含指定的value
boolean isEmpty():判断集合是否为空
int size():集合中"键值对"的数量
三、Map接口的获取功能:
V get(Object key):使用指定key查找对应"值"
Set<K> keySet():获取所有的"键"的集合(Set集合)
Collection<V> values():获取所有"值"的集合(Collection集合)
Set<Map.Entry<K,V>> entrySet():返回所有的"键值对-对象";Entry是Map的内部类; 一个Entry内部封装了一个"键"和一个"值"
四、Map接口的遍历方式:
方式1:根据键找值
获取所有键的集合:keySet
遍历键的集合,获取到每一个键:迭代器或增强for
根据键找值
方式2:根据键值对对象找键和值
获取所有键值对对象的集合
遍历键值对对象的集合,获取到每一个键值对对象
根据键值对对象找键和值
五、HashMap类概述:
键是哈希表结构,可以保证键的唯一性
1、HashMap集合键是String值是Student的案例:
2、HashMap集合键是Student值是String的案例:
六、LinkedHashMap概述和使用:
Map 接口的哈希表(保证唯一)和链接列表(保证顺序)实现,具有可预知的迭代顺序。
七、TreeMap类概述和使用:
键是红黑树结构,可以保证键的排序和唯一性
1、TreeMap集合键是String值是String的案例
2、TreeMap集合键是Student值是String的案例
八、HashMap和Hashtable的区别
1.Hashtable:
1).不能存储null键和null值;
2).从1.0版本开始;
3).线程安全的(同步),效率低;
2.HashMap:
1).可以存储null键和null值;
2).从1.2版本开始;
3).线程不安全的(不同步),效率高;
一、Map接口概述:
双列集合:在存储时,同时指定两个字段;一个做"键",一个做"值"(键值对)
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构值针对键有效,跟值无关
Collection集合的数据结构是针对元素有效
二、Map接口成员方法:
V put(K key,V value) :向集合中添加"键值对",如果发生重复的键,将用新值替换原值,并将原值返回;
V remove(Object key):移除key所指定的"键值对"
void clear():清空集合
boolean containsKey(Object key):判断是否包含指定key
boolean containsValue(Object value):判断是否包含指定的value
boolean isEmpty():判断集合是否为空
int size():集合中"键值对"的数量
package cn.hebei.sjz_Map基本功能; import java.util.HashMap; import java.util.Map; /* * Map接口的成员方法 */ public class Demo1 { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); // 填充元素 map.put("it01", "xu"); map.put("it02", "zhao"); map.put("it03", "le"); System.out.println(map);// {it02=zhao,it01=xu,it03=le} // 替换原it02对应的值 map.put("it02", "oahz"); System.out.println(map);// {it02=oahz,it01=xu,it03=le} // 移除it01 System.out.println(map.remove("it01"));// xu System.out.println(map);// {it02=oahz,it03=le} // 判断集合是否包含键it01 System.out.println(map.containsKey("it01"));// false // 判断是否包含键it02 System.out.println(map.containsKey("it02"));// true // 判断是否包含值le System.out.println(map.containsValue("le"));// true } }
三、Map接口的获取功能:
V get(Object key):使用指定key查找对应"值"
Set<K> keySet():获取所有的"键"的集合(Set集合)
Collection<V> values():获取所有"值"的集合(Collection集合)
Set<Map.Entry<K,V>> entrySet():返回所有的"键值对-对象";Entry是Map的内部类; 一个Entry内部封装了一个"键"和一个"值"
package cn.hebei.sjz_Map基本功能; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map接口的获取功能 */ public class Demo2 { public static void main(String[] args) { // 实例化一个Map Map<String, String> map = new HashMap(); // 填充元素 map.put("it01", "xu"); map.put("it02", "zhao"); map.put("it03", "le"); // 获取it03对应的值 System.out.println(map.get("it03"));// le Set<String> keys = map.keySet(); // 遍历键的集合 for (String key : keys) { System.out.println(key + "," + map.keySet()); } Collection<String> values = map.values(); // 遍历所有值的集合 for (String value : values) { System.out.println(value); } Set<Map.Entry<String, String>> entrySet = map.entrySet(); // 遍历所有的键值对 for (Map.Entry<String, String> m : entrySet) { String key = m.getKey(); String value = m.getValue(); System.out.println(key + "," + value); } } }
四、Map接口的遍历方式:
方式1:根据键找值
获取所有键的集合:keySet
遍历键的集合,获取到每一个键:迭代器或增强for
根据键找值
方式2:根据键值对对象找键和值
获取所有键值对对象的集合
遍历键值对对象的集合,获取到每一个键值对对象
根据键值对对象找键和值
package cn.hebei.sjz_Map基本功能; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map接口的遍历方式 */ public class Demo3 { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); // 填充元素 map.put("it01", "xu"); map.put("it02", "zhao"); map.put("it03", "le"); // 遍历方式一 Set<String> keys = map.keySet(); for (String key : keys) { System.out.println(key + "," + map.get(key)); } // 遍历方式二 Set<Map.Entry<String, String>> entrySet = map.entrySet(); for (Map.Entry<String, String> m : entrySet) { String key = m.getKey(); String value = m.getValue(); System.out.println(key + "," + value); } } }
五、HashMap类概述:
键是哈希表结构,可以保证键的唯一性
1、HashMap集合键是String值是Student的案例:
package cn.hebei.sjz_HashMap; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * HashMap集合键是String值是Student的案例: */ public class Demo { public static void main(String[] args) { Map<String, Student> map = new HashMap(); // 填充元素 map.put("it01", new Student("xu", 23)); map.put("it02", new Student("zhao", 24)); map.put("it03", new Student("le", 23)); // 遍历 Set<String> keys = map.keySet(); for (String key : keys) { Student s = map.get(key); System.out.p 4000 rintln("键" + key + "," + "值" + s.name + "," + s.age); } } }
2、HashMap集合键是Student值是String的案例:
package cn.hebei.sjz_HashMap; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * HashMap集合键是Student值是String的案例 */ public class Demo1 { public static void main(String[] args) { Map<Student, String> map = new HashMap(); // 填充集合 map.put(new Student("xu", 23), "it01"); map.put(new Student("zhao", 24), "it02"); map.put(new Student("le", 23), "it03"); // 遍历 Set<Map.Entry<Student, String>> entrySet = map.entrySet(); for (Map.Entry<Student, String> e : entrySet) { Student stu = e.getKey(); String value = e.getValue(); System.out.println("键" + stu.name + "," + stu.age + "值" + value); } } }
六、LinkedHashMap概述和使用:
Map 接口的哈希表(保证唯一)和链接列表(保证顺序)实现,具有可预知的迭代顺序。
package cn.hebei.sjz_LinkedHashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; /* * LinkedHashMap的概述和使用 */ public class Demo { public static void main(String[] args) { // 实例化一个LinkedHashMap Map<String, String> map = new LinkedHashMap<>(); // 填充集合 map.put("it01", "xu"); map.put("it02", "zhao"); map.put("it03", "le"); // 遍历集合 Set<String> keys = map.keySet(); for (String key : keys) { System.out.println(key + "," + map.get(key));// 取出时和存入的是一样的顺序 } } }
七、TreeMap类概述和使用:
键是红黑树结构,可以保证键的排序和唯一性
1、TreeMap集合键是String值是String的案例
package cn.hebei.sjz_TreeMap; import java.util.Set; import java.util.TreeMap; /* * TreeMap集合键是String值是String的案例 */ public class Demo { public static void main(String[] args) { // 实例化一个TreeMap TreeMap<String, String> map = new TreeMap(); // 填充集合 map.put("it01", "xu"); map.put("it02", "zhao"); map.put("it03", "le"); // 遍历集合 Set<String> keys = map.keySet(); for (String key : keys) { System.out.println(key + "," + map.get(key)); } } }
2、TreeMap集合键是Student值是String的案例
package cn.hebei.sjz_TreeMap; import java.util.Comparator; import java.util.Map; import java.util.Set; import java.util.TreeMap; /* * TreeMap集合键是Student值是String的案例 */ public class Demo1 { public static void main(String[] args) { // 实例化一个TreeMap TreeMap<Student, String> map = new TreeMap(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { int n1 = o1.name.compareTo(o2.name); int n2 = n1 == 0 ? (o1.age - o2.age) : n1; return n2; } }); // 填充集合 map.put(new Student("xu", 23), "it01"); map.put(new Student("zhao", 24), "it02"); map.put(new Student("le", 23), "it03"); // 遍历集合 Set<Map.Entry<Student, String>> entrySet = map.entrySet(); for (Map.Entry<Student, String> e : entrySet) { Student stu = e.getKey(); String value = e.getValue(); System.out.println("键" + stu.name + "," + stu.age + "值" + value); } } }
八、HashMap和Hashtable的区别
1.Hashtable:
1).不能存储null键和null值;
2).从1.0版本开始;
3).线程安全的(同步),效率低;
2.HashMap:
1).可以存储null键和null值;
2).从1.2版本开始;
3).线程不安全的(不同步),效率高;
package cn.hebei.sjz_HashMap; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; /* * HashMap和Hashtable的区别 */ public class Demo2 { public static void main(String[] args) { // 实例化一个Hashtable Map<String, String> map = new Hashtable(); // 填充集合 map.put("it01", "xu"); // map.put(null, "zhao");//空指针异常 // map.put("it03", null);//空指针异常 // 实例化一个HashMap Map<String, String> map1 = new HashMap(); // 填充集合 map1.put("it1", "xu"); map1.put(null, "zhao"); map1.put("it3", null); } }
相关文章推荐
- 写给想当程序员的朋友 -- 一个还不太老的程序员的体会
- 2015百度校园招聘面试题
- 百试不爽的面试经——咳咳,收到比亚迪面试通知的童鞋注意了
- Android 经典面试题总结
- 35岁程序员的独家面试经历
- 黑马程序员---正则表达式、反射
- 大龄程序员的未来在何方
- 一个程序员的跨洋找工作分享
- 挑战高薪的Android程序员建议看的文章
- 面试时,问哪些问题能试出一个Android应用开发者真正的水平?
- 近5年133个Java面试问题列表
- 十大编程算法助程序员走上高手之路
- java面试题
- 面试相关问题---待解决
- 月入30K的程序员要避开哪些坑?
- 个人面试提问企业必问的问题
- 面试题17:链表中倒数第k个结点(offer)
- 【黑马程序员】第六章:Java API
- IOS OC面试题
- 面试题 iOS OC