关于Map集合中常用的方法:

void clear(); 清空Map

boolean containsKey(Object key); 判断Map中是否包含这样的key

boolean containsValue(Object value); 判断Map中是否包含这样的value

Set<Map.Entry<K,V>> entrySet();  返回此映射中包含的映射关系的Set视图

Object get(Object key);  通过key获取value

boolean isEmpty();  判断该集合是否为空

Set keySet();  获取Map中所有的key

Object put(Object key,Object value);  向集合中添加键值对

Object remove(Object key);  通过key将键值删除

int size();  获取Map中键值对的个数

Set keySet(); 获取Map中所有的key

Collection values(); 获取Map集合中所有的value

注意:存储在Map集合key部分的元素需要同时重写HashCode和equals方法(这个在之前的HashSet中讲过)。Map的实现类又包括HashMap,Hashtable和TreeMap等,首先看看HashMap,结合以下代码来看:

import java.util.*;
public class MapTest{
  public static void main(String[] args){
    //1.创建Map集合
    Map persons = new HashMap();   //HashMap的默认初始化容量是16,加载因子是0.75
    //2.存储键值对
    persons.put("10000","JACK");
    persons.put("10000","TOM");
    persons.put("10001","KING");
    persons.put("10002","PIG");
    persons.put("10003","LINDA");
    persons.put("10004","KIDS");
    //3.判断键值对的个数
    //Map中的key是无序不可重复的,和HashSet相同
    System.out.println(persons.size());   //5 
    //4.判断集合中是否包含这样的key
    System.out.println(persons.containsKey("10000"));  //true
    //5.判断集合中是否包含这样的value
    System.out.println(persons.containsValue("JACK")); //false  
    //6.通过key获取value
    String k="10001";
    Object v=persons.get(k);
    System.out.println(v);   //KING
    //7.通过key删除键值对
    persons.remove("10002");
    System.out.println(persons.size());  //4
    //8.获取所有的value
    Collection values = persons.values();
    Iterator it=values.iterator();
    while(it.hasNext()){
      System.out.println(it.next());
    }
    //9.获取所有的key后遍历
    Set keys=persons.keySet();
    Iterator it2=keys.iterator();
    while(it2.hasNext()){
      Object id=it2.next();
      Object name=persons.get(id);
      System.out.println(id+"-->"+name);
    }
    //10.entrySet() 将Map转换成Set集合
    Set entrySet=persons.entrySet();
    Iterator it3=entrySet.iterator();
    while(it3.hasNext()){
     System.out.println(it3.next()); 
    }
    }
  }

上述代码中,

1.首先创建Map集合 persons,Map persons = new HashMap(); 这里注意HashMap的默认初始化容量是16,加载因子是0.75.

2.Object put(Object key,Object value);向集合中添加键值对,并使用size();方法获取Map中键值对的个数,这里输出键值对的个数为5,因为第一二个key重复,所以后面的键值对覆盖前面的键值对。我们可以通过System.out.println(persons.containsValue("JACK"));来验证,输出false,也就是键值对"10000","TOM"覆盖了键值对"10000","JACK"。

3.entrySet(); 将Map转换成Set集合,与第9个方法差不多,但是键与值之间只能用等号,所以一般不推荐使用,一般使用第9个方法那样的形式将Map转换成Set集合。

接着来看Hashtable,主要讲讲它的子类型Properties,它们之间的继承关系如下:

java.lang.Object

java.util.Dictionary<K,V>

java.util.Hashtable<Object,Object>

java.util.Properties

java.util.Properties;也是由key和value组成,但是key和value都是字符串类型。结合以下代码来看看Properties的主要方法。

import java.util.Properties;
public class MapTest02{
 public static void main(String[] args){
 //1.创建属性类对象
 Properties p=new Properties();
 //2.存
 p.setProperty("driver","oracle.jdbc.driver.OracleDriver");
 p.setProperty("username","scott");
       p.setProperty("username","tom");
 p.setProperty("password","tiger");
 p.setProperty("url","jdbc:oracle:thin:@192.168.1.100:1521:bjpowernode");
 //3.取
 String v1=p.getProperty("driver");
 String v2=p.getProperty("username");
 String v3=p.getProperty("password");
 String v4=p.getProperty("url");
 
 System.out.println(v1);
 System.out.println(v2);
 System.out.println(v3);
 System.out.println(v4);
 }
}

编译运行后输出:

oracle.jdbc.driver.OracleDriver
tom
tiger
jdbc:oracle:thin:@192.168.1.100:1521:bjpowernode

上述代码中,首先创建属性类对象p,然后使用setProperty()方法将键值对存进去,取值的方法为getProperty("key");(key为存进去的对应的字符串)。当key相同时,与HashMap中的相同,后面的键值对会覆盖前面的键值对。

最后来看TreeMap,TreeMap通过接口SortedMap实现。SortedMap中的key特点:无序不可重复,但是存进去的元素可以按照大小自动排序,之前讲过Map类的集合之所以可以实现自动排序,是因为key部分的元素实现了Comparable接口或单独写了一个比较器。key部分元素实现Comparable接口的代码如下:

import java.util.*;
public class SortedMapTest01{
 public static void main(String[] args){
   //Map,key存储Product,value存储重量
   SortedMap products=new TreeMap();
   //准备对象
   Product p1=new Product("西瓜",1.0);
   Product p2=new Product("桃子",4.0);
   Product p3=new Product("苹果",5.0);
   Product p4=new Product("香蕉",2.0);
   //添加
   products.put(p1,8.0);
   products.put(p2,3.0);
   products.put(p3,4.0);
   products.put(p4,10.0);
   //遍历
   Set keys=products.keySet();
   Iterator it=keys.iterator();
   while(it.hasNext()){
     Object k=it.next();
     Object v=products.get(k);
     System.out.println(k+"--->"+v+"kg");
   }
 }
}
class Product implements Comparable{
 String name;
 double price;
 Product(String name,double price){
   this.name=name;
   this.price=price;
 }
 public String toString(){
   return "Product[name="+name+",price="+price+"]";
 }
 public int compareTo(Object o){   //p1.compareTo(p2);
   double price1=this.price;
   double price2=((Product)o).price;
   if(price1<price2){
     return 1;
   }else if(price1>price2){
     return -1;
   }else{
     return 0;
   }
 }
}

编译运行后输出:

Product[name=苹果,price=5.0]--->4.0kg
Product[name=桃子,price=4.0]--->3.0kg
Product[name=香蕉,price=2.0]--->10.0kg
Product[name=西瓜,price=1.0]--->8.0kg

key部分元素单独写比较器的代码如下:

import java.util.*;
public class SortedMapTest02{
 public static void main(String[] args){
 SortedMap products=new TreeMap(new ProductPriceCompare());
 
 Product p1=new Product("西瓜",2.0);
 Product p2=new Product("香蕉",3.0);
 Product p3=new Product("橘子",4.0);
 Product p4=new Product("菠萝",4.5);
 
 products.put(p1,3.2);
 products.put(p2,6.5);
 products.put(p3,5.3);
 products.put(p4,4.3);
 
 Set keys=products.keySet();
   Iterator it=keys.iterator();
   while(it.hasNext()){
     Object k=it.next();
     Object v=products.get(k);
     System.out.println(k+"--->"+v+"kg");
   }
 }  
}
class Product{
 String name;
 double price;
 Product(String name,double price){
   this.name=name;
   this.price=price;
 }
 public String toString(){
   return "Product[name="+name+",price="+price+"]";
 }
}
class ProductPriceCompare implements Comparator{
 public int compare(Object o1,Object o2){
   double price1=((Product)o1).price;
   double price2=((Product)o2).price;
   if(price1>price2){
     return 1;
   }else if(price1<price2){
     return -1;
   }else {
     return 0;
   }
 }
}

编译运行后输出:

Product[name=西瓜,price=2.0]--->3.2kg
Product[name=香蕉,price=3.0]--->6.5kg
Product[name=橘子,price=4.0]--->5.3kg
Product[name=菠萝,price=4.5]--->4.3kg

Java Map类常用方法的更多相关文章

  1. JAVA String类常用方法

    一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的final类,不能有类.String类对象创建 ...

  2. java File类常用方法

    file类常用方法 delete()删除此抽象路径名表示的文件和目录. equals()测试此抽象路径名与给定对象是否相等. exists()测试此抽象路径名表示的文件或目录是否存在. getName ...

  3. Java Class类常用方法描述

    一 生成Class对象的三种方式 1 Class.forName("全路径名") 2  类名.Class 3 实例对象.getClass() 接着看三种方式生成Class对象的区别 ...

  4. AJPFX关于Java Object类常用方法小总结

    java.lang.Object   java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...

  5. Java File类常用方法及实例

    创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false. createTempFile(String prefix, String s ...

  6. java Map类

    实现类 类型区别 HashMap 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null(多条会覆盖);允 ...

  7. Java Object 类常用方法总结

    总结 public final native Class<?> getClass() //返回此 Object 运行时的类 public native int hashCode() //返 ...

  8. java Math类常用方法

    package com.niuke.test; public class MathDemo { public static void main(String args[]){ /** * abs求绝对 ...

  9. 八、java常用类

    目录 一.字符串相关类 String类 StringBuffer类 二.基本数据类型包装类 三.Math类 四.File类 五.枚举类 一.字符串相关类 1.String类 java.lang.Str ...

随机推荐

  1. AOP之 Filter实用

    前言 开心一笑~~~ 一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面是一个老奶奶和一个年轻漂亮的姑娘.两个上前坐了下来.程序 ...

  2. 接口测试:添加cookie以及身份验证

    添加cookie以及身份验证的接口文档: cookie:存放在本地的一个键值对 session:存放在服务端的一个键值对 学生金币充值接口文档: 一.使用postman进行测试 由于进行学生金币充值操 ...

  3. Objective-C适用C数学函数 <math.h>

    在实际工作中有些程序不可避免的需要使用数学函数进行计算,比如地图程序的地理坐标到地图坐标的变换.Objective-C做为ANSI C的扩展,使用C标准库头文件<math.h>中定义的数学 ...

  4. CentOS加入Windows域

    CentOS加入Windows域,为减少操作已经提前关掉了selinux,防火墙.并且更改了主机名 yum install  nss-pam-ldapd -y 第一步:更改主机名为linux.itxd ...

  5. NTP搭建指南

    NTP搭建指南 前言: NTP是网络时间协议(Network Time Protocol),用于全球的标准时间(UTC)的校正. 一般NTP 服务有不同的层次:一层是源头NTP 服务器,一层服务器都设 ...

  6. P5283 [十二省联考2019]异或粽子 可持久化01Trie+线段树

    $ \color{#0066ff}{ 题目描述 }$ 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 \(n\) 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 ...

  7. Orleans MultiClient 多个Silo复合客户端

    目录 介绍 使用 简单例子 配置 注入到 DI 容器 添加多个 Client 全局 Orleans 服务配置 介绍 Orleans.MultiClient 是一个 Orleans 复合客户端,只需要简 ...

  8. 微信小程序 没有找到node_modules目录 ,小程序引入vant框架报错。

    如果大家是按照官网的引入方法,是否报错如图 不着急,大家就试试我的方法吧!两步走完美搞定! 第一步: 在小程序顶部点击设置->项目设置,会弹出下面的窗口.大家把使用npm模块勾上对勾. 第二步: ...

  9. centos的基本命令02

    16:查看系统运行的进程 ps -ef 17:查看系统已开放的端口 netstat -tunlp 18:管道命令 ps -ef | grep tom # 查看系统中与tom相关的进程 19:grep过 ...

  10. SPOJ - TTM 主席树

    给你一个系列\(a[1...n]\),要求可以区间求和,区间更新,也可以回溯过去 经典的主席树板子题,很久以前做的题了,代码太丑回炉重写 PS.题目标题To The Moon也是我最喜欢的游戏之一 这 ...