黑马程序员——集合总结
2015-10-14 00:10
417 查看
1:Map集合(
(1)Map集合存储的是键值对元素。
键是唯一的,值可以重复。
(2)Map和Collection的区别?
A:Map是双列集合,存储的元素键值对,键唯一,值可以重复。
B:Collection是单列集合,存储的元素是单一的,List集合可以重复,Set集合元素唯一。
(3)Map集合的功能
A:添加功能
V put(K key,V value)
B:删除功能
remove(K key)
C:判断功能
containsKey(K key)
containsValue(V value)
D:获取功能
V get(K key)
Set<K> keySet()
Collection<V> values()
Set<Map.Entry<K,V>> entrySet()
Map.Entry:
getKey
getValue
E:长度功能
int size()
(4)Map集合的数据结构问题:
Map集合的数据结构对键有效,跟值无关。
它的底层数据结构和Set中讲解的一致。
如果是哈希表结构,就需要重写hashCode()和equals()。
如果是二叉树结构,就有两种方式:Comparable,Comparator
(5)Map的遍历方式
假设有一个HashMap集合,存储的键和值都是String类型。名称叫hm。
A:根据键找值(掌握)
a:获取所有键的集合
b:遍历键的集合,获取到每一个键
c:根据键找值
代码体现:
Set<String> set = hm.keySet();
for(String key : set) {
String value = hm.get(key);
System.out.println(key+"---"+value);
}
B:根据键值对对象找键和值(理解)
a:获取所有键值对对象的集合
b:遍历键值对对象的集合,获取到每一个键值对对象
c:根据键值对对象获取键和值
代码体现:
Set<Map.Entry<String,String>> set = hm.entrySet();
for(Map.Entry<String,String> me : set) {
String key = me.getKey();
String value = me.getValue();
System.out.println(key+"---"+value);
}
(6)案例:
A:统计一个字符串中每个字符出现的次数
B:Map集合的嵌套存储和遍历
(7)Map集合的体系
Map
|--HashMap
|--LinkedHashMap
|--Hashtable
|--TreeMap
A:HashMap和Hashtable的区别?
B:LinkedHashMap的键的特点?
2:集合总结(什么时候使用谁?)
是否键值对:
是:Map
是否排序:
是:TreeMap
否:HashMap
不知道,HashMap
否:Collection
是否唯一:
是:Set
是否排序:
是:TreeSet
否:HashSet
不知道,HashSet
否:List
增删多:LinkedList
查询多:ArrayList
不知道,ArrayList
不知道,用ArrayList
3:集合体系总结
集合:
|--Collection
|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set
<
4000
/span>|--HashSet
底层数据结构是哈希表。
如何保证唯一性?
依赖hashCode()和equals()
顺序:
先判断hashCode()值是否相同:
是:继续走equals(),看返回值
true:元素重复。不添加
false:元素不重复。添加
否:直接添加
--LinkedHashSet
底层数据结构是链表和哈希表。
由链表保证有序(存储和取出一致)。
由哈希表保证元素唯一。
|--TreeSet
底层数据结构是二叉树。
如果保证唯一性?
根据返回值是否是0。
如何排序:
自然排序:Comparable
比较器排序:Comparator
|--Map
|--HashMap
|--LinkedHashMap
|--Hashtable
|--TreeMap
(1)Map集合存储的是键值对元素。
键是唯一的,值可以重复。
(2)Map和Collection的区别?
A:Map是双列集合,存储的元素键值对,键唯一,值可以重复。
B:Collection是单列集合,存储的元素是单一的,List集合可以重复,Set集合元素唯一。
(3)Map集合的功能
A:添加功能
V put(K key,V value)
B:删除功能
remove(K key)
C:判断功能
containsKey(K key)
containsValue(V value)
D:获取功能
V get(K key)
Set<K> keySet()
Collection<V> values()
Set<Map.Entry<K,V>> entrySet()
Map.Entry:
getKey
getValue
E:长度功能
int size()
(4)Map集合的数据结构问题:
Map集合的数据结构对键有效,跟值无关。
它的底层数据结构和Set中讲解的一致。
如果是哈希表结构,就需要重写hashCode()和equals()。
如果是二叉树结构,就有两种方式:Comparable,Comparator
(5)Map的遍历方式
假设有一个HashMap集合,存储的键和值都是String类型。名称叫hm。
A:根据键找值(掌握)
a:获取所有键的集合
b:遍历键的集合,获取到每一个键
c:根据键找值
代码体现:
Set<String> set = hm.keySet();
for(String key : set) {
String value = hm.get(key);
System.out.println(key+"---"+value);
}
B:根据键值对对象找键和值(理解)
a:获取所有键值对对象的集合
b:遍历键值对对象的集合,获取到每一个键值对对象
c:根据键值对对象获取键和值
代码体现:
Set<Map.Entry<String,String>> set = hm.entrySet();
for(Map.Entry<String,String> me : set) {
String key = me.getKey();
String value = me.getValue();
System.out.println(key+"---"+value);
}
(6)案例:
A:统计一个字符串中每个字符出现的次数
B:Map集合的嵌套存储和遍历
(7)Map集合的体系
Map
|--HashMap
|--LinkedHashMap
|--Hashtable
|--TreeMap
A:HashMap和Hashtable的区别?
B:LinkedHashMap的键的特点?
2:集合总结(什么时候使用谁?)
是否键值对:
是:Map
是否排序:
是:TreeMap
否:HashMap
不知道,HashMap
否:Collection
是否唯一:
是:Set
是否排序:
是:TreeSet
否:HashSet
不知道,HashSet
否:List
增删多:LinkedList
查询多:ArrayList
不知道,ArrayList
不知道,用ArrayList
3:集合体系总结
集合:
|--Collection
|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set
<
4000
/span>|--HashSet
底层数据结构是哈希表。
如何保证唯一性?
依赖hashCode()和equals()
顺序:
先判断hashCode()值是否相同:
是:继续走equals(),看返回值
true:元素重复。不添加
false:元素不重复。添加
否:直接添加
--LinkedHashSet
底层数据结构是链表和哈希表。
由链表保证有序(存储和取出一致)。
由哈希表保证元素唯一。
|--TreeSet
底层数据结构是二叉树。
如果保证唯一性?
根据返回值是否是0。
如何排序:
自然排序:Comparable
比较器排序:Comparator
|--Map
|--HashMap
|--LinkedHashMap
|--Hashtable
|--TreeMap
相关文章推荐
- 为什么常说程序员35岁是道坎?
- 黑马程序员——综合练习 学生信息管理系统
- 黑马程序员_JAVA之IO流的(转换流,数据输入输出流等)
- 黑马程序员——关于集合的例题
- 黑马程序员_JAVA常用类API(StringBuffer类,数组高级应用,包装类)
- 黑马程序员——io的九种文件复制方式
- iOS-遇见的面试题总结与分析
- 黑马程序员——多线程(下)
- Android开发面试题(二)
- 二分查找实现(Jon Bentley:90%程序员无法正确实现)
- 黑马程序员——多线程(上)
- 黑马程序员-用IO流复制文本文件、图片文件、歌词文件举例
- 接着写某狼厂面试题目经验2015
- Android开发面试题(一)
- 黑马程序员——C基础---二维数组
- 项目经理面试指南
- 在我程序员之路的开始写点东西吧
- 黑马程序员——java基础之多线程
- 《剑指Offer》面试题:寻找的连续序列的和等于某一定值
- 【黑马程序员】【Foundation框架】数组NSArray和NSMutableArray