Java--集合Map

Map集合:

    用于存储成对的数据<key,values>,一对一的往里面存入而且要保证键的唯一性;Collection用于存储
        单个的数据
     |--Hashtable:底层的数据结构是哈希算法,不可存入null键和null值,线程同步、安全,执行效率低
     |--HashMap:底层的数据结构是哈希算法,可以存入null键和null值,线程不同步,不安全,执行效率高;替代了
         Hashtable
     |--TreeMap:底层的数据结构是二叉树结构,线程不同步,可以用于给map集合进行排序
 
 HashMap如何实现存入的元素不重复?
  HashMap集合中不能存入相同的元素而判定元素是否相同的依据是hashCode和equals两个方法
  如果两个元素的hashCode值相同时则再用equals方法来比较两个元素是否是真的相同,
  如果相同则不存入,否则存入,所以自定义的元素对象要复写这个方法
  
 hashMap中如果存入相同的键而存入的相应的值不同时,则后存入的值会覆盖先前的值
 
 TreeMap如何实现存入的元素排序?
  有两种方式可以实现判断元素的方法
   1.元素自身实现comparaTo方法
     元素实现comparable接口中的comparaTo方法
   2.集合自身覆盖comparator接口
      集合自身实现compare方法
 
 
 Map常用方法:
 1.添加:
  put(K key,V values):向集合中加入元素
  putAll(Map m):向集合中加入另一个集合
 2.删除:
  remove(Object b): 如果存在一个键的映射关系,则将其从此映射中移除(可选操作
  clear():清空集合
 3.判断:
  containsKey(Object key):判断集合中是否有指定的键
  containsValue(Object value):判断集合中是否有指定的值
  isEmpty():判断集合是否为空
 4.获取:
  get(Object key):返回指定键的值,没有则返回null
  size():返回集合元素的个数
 Map集合的两种获取方式:
   1.Set<k> keySet():
     将map中所有的键数据存入Set集合中,因为Set中有迭代器,可以通过set中的迭代器取出所有
  的键,再根据get()来取出对应的值,每一个对应的键都有对应的一个值
  原理:将Map集合转化为Set集合,再根据Set迭代器取出元素
   2.Set<Map.Entry<k,v>>  entrySet():
  将Map集合中的映射关系存入到Set集合中,而这个关系类型就是Map.Entry()
  Entry其实是Map集合中的一个内部接口
  
import java.util.*;
public class MapTest{
 public static void main(String[] args){
  Map<String,String> ma=new HashMap<String,String>();
  ma.put("01","lidaofu");
  ma.put("03","haha");
  ma.put("04","afu");
  ma.put("02","daofu");
  
  //第一种取出元素的方式
  Set<String> key=ma.keySet();
  Iterator it=key.iterator();
  while(it.hasNext()){
   String ke=(String)it.next();
   String value=ma.get(ke);
   System.out.println("key="+ke+" value="+value);
  }
  System.out.println(ma);
  
  //第二种取出元素的方式
  Set<Map.Entry<String,String>> entry=ma.entrySet();
  Iterator<Map.Entry<String,String>> it=entry.iterator();
  while(it.hasNext()){
   Map.Entry<String,String> me = it.next();
   String key = me.getKey();
   String value = me.getValue();
   System.out.println(key+":"+value);

  }
 }
}


//向集合中存入自定义对象
import java.util.*;
class Person{
 private String name;
 private int age;
 Person(String name,int age){
  this.name=name;
  this.age=age;
 }
 public int hashCode(){
  return this.name.hashCode()+this.age*5;
 }
 public boolean equals(Object obj){
  Person p=(Person)obj;
  return (this.name.equals(p.name)==true) ? ((this.age==p.age) ? true : false) : false;
 }
 public String toString(){
  return "name: "+this.name+" age :"+this.age;
 }
}
public class MapTest{
 /*
  需求:向集合中存入个人信息和所在地,并打印输出
  分析:因为存入的是键值对,所以可以用HashMap集合,因为存入的元素是自定义的元素,所以要
  覆写父类中的hashCode()和equals()两个方法,这两个方法能保证存入的元素唯一性  
  而从集合中取出元素Map集合有两种方式:
  1.通过先取出Map集合中的键集合,再通过键取出集合中的值
  2.通过取出Map集合中视图关系,再通过视图取出集合中的元素
 */
 public static void main(String[] args){
  HashMap<Person,String> hm=new HashMap<Person,String>();
  hm.put(new Person("lidaofu",34),"蚌埠");
  hm.put(new Person("daofu",23),"合肥");
  hm.put(new Person("LIDAOFU",22),"杭州");
  hm.put(new Person("lidafu",34),"桐城");
  hm.put(new Person("fu",25),"北京");
  hm.put(new Person("李",12),"天津");
  hm.put(new Person("道",67),"上海");
  hm.put(new Person("福",45),"安庆");
  
  //第一种取出方式
  
  //取集合视图
  Set<Map.Entry<Person,String>> se=hm.entrySet();
  //取集合视图迭代器
  Iterator<Map.Entry<Person,String>> it=se.iterator();
  //取集合元素
  while(it.hasNext()){
   Map.Entry<Person,String> entry=it.next();
   Person p=entry.getKey();
   String s=entry.getValue();
   System.out.println(p+":"+s);
  }
  
  //第二种取出方式
  
  //取键集合
  Set<Person> se=hm.keySet();
  //取集合迭代器
  Iterator<Person> it=se.iterator();
  //取元素
  while(it.hasNext()){
   Person p=it.next();
   String value=hm.get(p);
   System.out.println(p+" : "+value);
  }
  
  //取出值集合元素
  Collection<String> con=hm.values();
  Iterator<String> it=con.iterator();
  while(it.hasNext()){
   System.out.println(it.next());
  } 
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值