关于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.OracleDrivertomtigerjdbc: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.0kgProduct[name=桃子,price=4.0]--->3.0kgProduct[name=香蕉,price=2.0]--->10.0kgProduct[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.2kgProduct[name=香蕉,price=3.0]--->6.5kgProduct[name=橘子,price=4.0]--->5.3kgProduct[name=菠萝,price=4.5]--->4.3kg
原文地址:https://www.cnblogs.com/naihuangbao/p/9444469.html