`
宁远天意
  • 浏览: 5424 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_Map集合

阅读更多
----------- android培训java培训、java学习型技术博客、期待与您交流! ---------




Map集合:
是一个存储键值对的集合。数据不再是单个的了,而是必须由键和值组成。
最大的一个特点:就是体现对应关系。
常见问题:
Map和Collection的区别?
Map:
是一个双列(键值对)集合。键必须是唯一的,值可以重复。可以看做是夫妻对。
Collection:
是一个单列集合。他的List儿子是可以存储重复元素的。而Set不可以存储重复元素(唯一性)。可以看做是单身汉集合。
Map集合的功能:
A:添加
V put(K key,V value);  给集合添加键值对。
如果没有,就添加,返回null。
如果有,就替换,返回替换之前的值。

B:删除:
void clear();   删除多有的键值对
V remove(Object key);  根据给定的键删除对应的键值对。
如果给定的键存在,就返回对应的值。
如果给定的键不存在,返回null。
C:判断
boolean containsKey(Object key);  是否包含给定的键
boolean containsValue(Object value);  是否包含给定的值
boolean isEmpty();  是否为空
D:获取
Object get(Object key); 根据键返回对应的值。
Set<K> keySet();  拿到所有的键。
Collection<V> values(); 拿到所有的值。
Set<Map.Entry<K,V>> entrySet(); 拿到所有的键值对。
E:长度
int size();  获取长度。
长度指的是多有的键值对的对数。
注意事项:
Map集合的具体实现类(HashMap,TreeMap)的数据结构,只针对键有效。
Map集合的遍历方式:
第一种:丈夫找妻子(丈夫是键,妻子是值)  ---要求大家必须掌握
1、把所有的丈夫(键)集中起来。其实就相当于获取到所有的键。  keySet();
2、遍历所有的键。相当于拿到单个的丈夫。    增强for或者迭代器都可以。
3、让丈夫去找自己的妻子。相当于根据键去找值。 get(Object key)方法
第二种:通过结婚证找丈夫和妻子。 --   要求大家理解就可以了,能掌握的话,最好掌握
1、我要拿到多有的结婚证。相当于,拿到所有的键值对。  Set<Map.Entry<K,V>> entrySet()
2、遍历结婚证集合,拿到单个的结婚证。相当于通过遍历,拿到单个的键值对。  Map.Entry<K,V>
3、通过结婚证来找对应的丈夫和妻子。相当于通过键值对来找里边的键和值。 getKey(),getValue();

键值:String,String
  String,Student
  Student,String
需求:学生类做键,String类的学号做值。
特有需求:如果学生的姓名和年龄一致,我就认为他是同一个。
注意:保证键的唯一性。(在学生类里边重写hashCode方法和equals方法)

使用TreeMap存储字符串的键值对(键值都是字符串类型),哪应该怎么添加,怎么遍历?
1、创建键值对集合对象。
2、向集合中添加数据。
3、遍历。
A:获取到所有的键。 getKey();
B:用增强for来遍历键的集合。拿到每个键。
C:根据获得到的键,来找对应的值。  get(Object key)

使用TreeMap存储自定义对象(键:学生类,值:字符串)。如果我想实现排序,应该怎么办?

注意事项:
如果自定义对象作为键的时候,使用TreeMap集合,就必须对元素进行排序。
怎么排序?
1、让自定义对象所属的类(Student类)去实现Comparable接口,然后重写接口中的comapareTo()方法。
2、使用带参构造,创建TreeMap集合对象。接收比较器接口Comaparator传过来的参数。(用匿名内部类的方式来做)

HashMap和Hashtable的区别?
HashMap:线程不安全的,效率高,允许null键和null值。
Hashtable:线程安全,效率低。不允许null键和null值。

有一个字符串:  "cbxzbvavdvgd"  要求获取字符串中,每一个字母出现次数:"a(1)b(2)c(1)d(2)g(1)v(3)x(1)z(1)"
1、把字符串转成字符数组。   toCharArray();
2、定义一个TreeMap集合,Character做键(代表字符),Integer做值(代表每个字符出现的次数)。
3、遍历字符数组,然后获取到每一个字符。
4、然后根据获取到的字母去TreeMap集合中找对应的值。  Object get(Object obj):根据键找值;
5、如果第4步的返回值为null,就把该字母添加到集合中,次数记录为1.
如果第4步的返回值不为null,就把次数++,然后重新存储该字符。
6、把集合中的键值对按照我们的需求拼接成字符串。

    基础班,就业班
基础班:
01,zhangshang
02,lisi
就业班:
03,wangwu
04,zhaoliu
思路:
1、创建一个集合对象,键是字符串,值是HashMap集合(键和值都是字符串,键记录的是学生的学号,值记录的是学员的名字)。
2、分别创建基础班集合,就业班集合。
3、创建学员对象。
3、把第三步创建的学员对象添加到对应的第二步创建的集合中。

用HashMap的key来存预热班和就业班,用value的位置来存ArrayList集合, ArrayList集合中再来存Student对象.Student对象中再来存数据.

HashMap<String, ArrayList<Student>> hm = new HashMap<String, ArrayList<Student>>();




----------- android培训java培训、java学习型技术博客、期待与您交流! ---------
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics