传智播客学习总结---集合(Map)

Map集合:
     |--HashMap:线程不安全,底层存储结构是哈希表。可以存入null键null值,替代了Hashtable。
     |--Hashtable:线程安全,底层是哈希表,不可以存入null键null值
     |--TreeMap:线程不安全。底层是二叉树。可以对Map集合中的键进行排序。

Map与Collection的不同:

Collection每次只能存储一个元素,Map以键值对的形式一次存储一对元素,并且保证元素唯一性.

Map存储元素使用的是put()方法,Collection存储元素使用的是add()方法。

因为Map没有实现Itertable接口,所以在便利Map中的元素时不能使用迭代器,可以使用以下三种方法:

               keySet():将map集合中的键存入set集合。在通过iterator取出,
                              并通过map集合的get方法获取键所对应的值。
               entrySet():将map集合中的键值映射关系取出存入到set集合中。
                                映射关系包含键和值,该映射关系的类型是:Map.Entry.
                               Map.Entry是什么呢?
                               Entry是Map接口中的一个共有静态内部接口。
                values():可以取出map集合所有的值。存入到了Collection集合中。

例:

import java.util.*;
public class TestTreeMap {
 public static void main(String[] args) {
  TreeMap<Student,String> tm = new TreeMap<Student,String>(new Comparator<Student>(){
   public int compare(Student s1,Student s2){
    if(s1.getAge()>s2.getAge())
     return 1;
    else if(s1.getAge()==s2.getAge())
     return s1.getName().compareTo(s2.getName());
    return -1;
   }
  });
  tm.put(new Student("zhangsan",25),"beijing");
  tm.put(new Student("lisi",22),"beijing");
  tm.put(new Student("wangwu",29),"nanjing");
  tm.put(new Student("zhaoliu",17),"shanghai");
  tm.put(new Student("wangwu",29),"nanjing");
  
  /*实现方式一
  Set<Student> set = tm.keySet();
  for(Iterator<Student> it = set.iterator();it.hasNext();)
  {
   Student stu = it.next();
   String addr = tm.get(stu);
   System.out.println(stu.getName()+stu.getAge()+addr);
  }*/
  /*实现方式二
   Set<Map.Entry<Student,String>> set = tm.entrySet();
  for(Iterator<Map.Entry<Student,String>> it = set.iterator();it.hasNext();){
   Map.Entry<Student,String> e = it.next();
   Student stu = e.getKey();
   String addr = e.getValue();
   System.out.println(stu.getName()+stu.getAge()+addr);
  }*/
  /*实现方式三
  Collection<String> col = tm.values();
  for(Iterator<String> it = col.iterator();it.hasNext();)
  {
   String addr = it.next();
   System.out.println(addr);
  }*/   
 }
}


class Student{
 private String name;
 private int age;
 Student(String name,int age){
  this.name = name;
  this.age = 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;
 }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值