Java Map类常用方法
关于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类常用方法的更多相关文章
- JAVA String类常用方法
一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的final类,不能有类.String类对象创建 ...
- java File类常用方法
file类常用方法 delete()删除此抽象路径名表示的文件和目录. equals()测试此抽象路径名与给定对象是否相等. exists()测试此抽象路径名表示的文件或目录是否存在. getName ...
- Java Class类常用方法描述
一 生成Class对象的三种方式 1 Class.forName("全路径名") 2 类名.Class 3 实例对象.getClass() 接着看三种方式生成Class对象的区别 ...
- AJPFX关于Java Object类常用方法小总结
java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...
- Java File类常用方法及实例
创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false. createTempFile(String prefix, String s ...
- java Map类
实现类 类型区别 HashMap 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null(多条会覆盖);允 ...
- Java Object 类常用方法总结
总结 public final native Class<?> getClass() //返回此 Object 运行时的类 public native int hashCode() //返 ...
- java Math类常用方法
package com.niuke.test; public class MathDemo { public static void main(String args[]){ /** * abs求绝对 ...
- 八、java常用类
目录 一.字符串相关类 String类 StringBuffer类 二.基本数据类型包装类 三.Math类 四.File类 五.枚举类 一.字符串相关类 1.String类 java.lang.Str ...
随机推荐
- Saiku2.6 Saiku315 链接SQL的JDBC字符串
Saiku26 type=OLAP name=CloudConn driver=mondrian.olap4j.MondrianOlap4jDriver location=jdbc:mondrian: ...
- GPUImage处理图片(滤镜)
GPUImage 是基于 GPU 处理图像的一个开源库, 提供了各种图像处理滤镜,例如调 亮度/饱和度/曝光度/白平衡/锐化等滤镜. 并且支持照相机/摄像机 的实时滤镜. GPUImage采用链式方式 ...
- tomcat Setting property 'source' to 'org.eclipse.jst.jee.server
很不爽,好好的项目不知道突然怎么了... 启动tomcat出个错,,,,, setting property 'source' to 'org.eclipse.jst.jee.server:jeesi ...
- bzoj 3261 最大异或和 可持久化字典树(01树)
题目传送门 思路: 由异或的性质可得,题目要求的式子可以转化成求$max(pre[n]^x^pre[i])$,$pre[i]$表示前缀异或和,那么我们现在就要求出这个东西,所以用可持久化字典树来求,每 ...
- GTP
GPRS隧道协议(GPRS Turning Protocol) GTP是一个高层协议,位于TCP/IP或UDP/IP等协议上,提供主机间端到端通信, 通过隧道标志(TEI)在路径协议上复用 GTP ...
- 解决kvm虚拟机启动之后,网卡eth0变为eth1问题
2018-12-19 故障前提 kvm虚拟机迁移到其他服务器上之后,重新启动网卡会出现问题 例如原网卡名称为eth0,迁移重启之后会自动变为eth1 为什么eth0会变成eth1? 很多Linux d ...
- crontab例行性共作
一.单一工作调度 at [-mldv] TIME at -c 工作号码 -m:当at工作结束后,即是没有输出信息,以email通知用户该工作已完成 -l:at -l相当于atq,列出目前系统上所有的a ...
- Vue-cli3 WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB)
在vue.config.js里 添加 configureWebpack : { performance: { hints:'warning', //入口起点的最大体积 整数类型(以字节为单位) max ...
- 关于CAS
CAS就是Compare And Swap. CAS操作是在每一次做修改操作时,并不加锁,而是在修改时比较旧值是否有变化,如果旧值不变就执行修改,如果旧值有变,则修改失败. 使用sql表示就是 upd ...
- Java框架-mybatis03使用注解实现mybatis
1.面向接口编程: 好处:扩展性好,分层开发中,上层不用管具体的实现,都遵循共同的标准,使得开发变得容易.规范性更好 2.注解的实现 a)编写Dao接口 public interface UserDa ...