Java集合--双列集合Map

Map集合

       前面我们提到过的Collection集合以及他的子实现类,这些集合属于单列集合,而在实际开发中,经常使用到的还有双列集合Map集合。

      在具体讲双列集合之前,再来回忆一下单列集合。在单列集合中,首先分为List和Set两个集合,而List集合又分为ArrayList,Vector,和LinkdList子实现类,Set分为HashSet、LinkedHashSet和TreeSet。而List和Set的区别在于,List集合是有序的,而且元素可以重复,Set集合是无序的,元素唯一。

     双列集合顾名思义就是存储了两个值,而这两个值通常被称为键值对。例如:一个人的名字对应他的年龄,这就是一个键值对。Map同Collection一样也是作为双列集合的根集合,下面有三个子类,HashMap、LinkedHashMap和TreeMap。同单列集合一样,HashMap是无序的,要是是自定义对象需要重写hashCode和equals方法保证他的唯一性;LinkedHashMap是有序的,这里的有序指的是元素存入和取出的顺序一致;而TreeMap不仅是有序的,因为其底层的红黑树结构,它可以根据键值的大小进行排序。而集合的这些特点都是和其底层结构有关。

HashMap底层数据结构是哈希表,所以其特点是元素无序且唯一(自定义对象需要重写hashCode和equals方法保证他的唯一性)

LinkedHashMap底层数据结构是链表和哈希表,而链表保证了元的有序性

TreeMap底层数据结构是红黑树,可以对元素进行排序

可以看出,单列集合的Set集合的特性以及子实现类和Map集合具有很多共同点,而在前面我们也提到过Set集合最后是依赖于Map集合实现的,所以,在对单列集合有所了解之后,再理解Map集合应该不会很难。

先给出一个Map集合对象的构造:

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

因为Map集合也是一个接口,所以利用抽象类多态实现对象的创建,其中的String泛型指的就是键,Student泛型指的就是值,通常统称为一个键值对。

需要注意的是:Map集合的数据结构之和键有关,和值无关。

在创建对象之后,就可以利用Map中的成员方法来实现对对象的操作,这里就先提到一个方法,put(key,value)方法,这和单列集合中的add方法功能一样,就是给集合添加元素的。例如:hm.put("s001", new Student("张三", 23));

这里来讲一下Map集合的遍历,先给出一个单列集合的遍历方式:for(Student s : hs){
System.out.println(s.getName()+"---"+s.getAge());
}

这是一个单列集合遍历的例子,hs是一个单列集合对象,而对于双列集合的遍历,由两种方式

1)Set<String> keySet = hm.keySet();
for (String key : keySet) {
System.out.println(key + "====" + hm.get(key).getName() + "--" + hm.get(key).getAge());
}

首先得到一个键的Set集合,然后结合get方法获取键对应的值完成遍历

2)Set<Entry<String, Student>> entrySet = hm.entrySet();
for (Entry<String, Student> en : entrySet) {


String key = en.getKey();
Student stu = en.getValue();
System.out.println(key + "==" + stu.getName() + "--" + stu.getAge());
}

首先得到一个键值对对象的Set集合,然后通过entrySet中的getKey()和getValue()完成遍历。

注意,在遍历之前首先获得一个Set集合,然后再进行遍历。

最后给出Map集合中常用的成员方法:

size获取集合的长度;isEmpty判断集合是否为空;containsKey(key)判断集合是否有此键;containsValue(value)判断集合是否有这个值;remove(key)根据键移除一对键值对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值