Java之集合Map

来源:互联网 发布:软件开发需求文档模板 编辑:程序博客网 时间:2024/05/29 08:23
package com.shuhuadream.map;import java.util.HashMap;import java.util.Map;/* *  * 在现实生活中有些数据是以映射关系存在的,也就是成对存在的。 *  * 双列集合: * -----------|Map     如果是实现了Map接口的集合类,具备的特点:存储的数据都是以键值对的形式存在的,键不可以重复,值可以重复 * --------------|HashMap * --------------|TreeMap * --------------|Hashtable *  * Map接口的方法: * 添加: * put(K key, V value)           将指定的值与此映射中的指定键关联(可选操作)。        putAll(Map<? extends K,? extends V> m)           从指定映射中将所有映射关系复制到此映射中(可选操作)。 *  *  * 获取: * get(Object key)           返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。 * size()           返回此映射中的键-值映射关系数。 * 判断: * containsKey(Object key)           如果此映射包含指定键的映射关系,则返回 true。 * containsValue(Object value)           如果此映射将一个或多个键映射到指定值,则返回 true。        isEmpty()           如果此映射未包含键-值映射关系,则返回 true。 * 删除: * remove(Object key)           如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。        clear()           从此映射中移除所有映射关系(可选操作)。 *  * 迭代: * keySet()           返回此映射中包含的键的 Set 视图。 * values()           返回此映射中包含的值的 Collection 视图。        entrySet()           返回此映射中包含的映射关系的 Set 视图。 *  *  */public class Demo02 {public static void main(String[] args) {Map<String,String> map = new HashMap<String,String>();//添加方法map.put("汪峰", "章子怡");map.put("杨过","小龙女");map.put("文章", "姚笛");/*System.out.println("返回值:"+map.put("文章", "马伊琍"));System.out.println("集合的元素:"+map);Map<String,String> map2 = new HashMap<String,String>();map2.put("杨振宁", "翁帆");map2.put("习大大", "彭丽媛");map.putAll(map2);System.out.println(map);*//*//删除方法System.out.println("删除的数据是:"+map.remove("汪峰"));System.out.println(map);map.clear();System.out.println(map);//清空集合中的所有元素*//*//获取方法System.out.println("根据指定的键获取对对应的值:"+map.get("文章"));System.out.println("获取map集合中的键值对的个数:"+map.size());*//*//获取方法System.out.println("判断map集合是否包含指定的键:"+map.containsKey("文章"));System.out.println("集合中的元素:"+map);System.out.println("判断map集合只能够是否包含指定的值:"+map.containsValue("小龙女"));map.clear();map.put(null, null);System.out.println("判断map集合是否为空元素:"+map.isEmpty());*/}}
package com.shuhuadream.map;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;/*迭代:keySet() values() entrySet() */public class Demo03 {public static void main(String[] args) {Map<String,String> map = new HashMap<String, String>();//添加方法map.put("汪峰", "章子怡");map.put("文章", "马伊琍");map.put("谢霆锋","张柏芝");map.put("成龙", "林凤娇");/*//map集合中遍历方式一: 使用keySet方法进行遍历       缺点: keySet方法只是返回了所有的键,没有值。 Set<String> keys = map.keySet();  //keySet() 把Map集合中的所有键都保存到一个Set类型 的集合对象中返回。Iterator<String> it = keys.iterator();while(it.hasNext()){String key = it.next();System.out.println("键:"+ key+" 值:"+ map.get(key));}//map集合的遍历方式二: 使用values方法进行 遍历。    缺点: values方法只能返回所有 的值,没有键。Collection<String>  c = map.values(); //values() 把所有的值存储到一个Collection集合中返回。Iterator<String> it = c.iterator();while(it.hasNext()){System.out.println("值:"+ it.next());}*///map集合的遍历方式三: entrySet方法遍历。Set<Map.Entry<String,String>>  entrys = map.entrySet(); Iterator<Map.Entry<String,String>> it = entrys.iterator();while(it.hasNext()){Map.Entry<String,String> entry = it.next();System.out.println("键:"+ entry.getKey()+" 值:"+ entry.getValue());}}}
package com.shuhuadream.map;import java.util.ArrayList;class Map{//静态内部类 static class Entry<K ,V>{K  key;V value;} }public class Demo04 {public static void main(String[] args) {}}

package com.shuhuadream.map;import java.util.HashMap;/** 双列集合:* -----------|Map     如果是实现了Map接口的集合类,具备的特点:存储的数据都是以键值对的形式存在的,键不可以重复,值可以重复* --------------|HashMap底层也是基于哈希表实现的* --------------|TreeMap* --------------|Hashtable* * HashMap存储原理:* 往HashMap 添加元素的时候,首先会调用键的hashCode方法得到元素的哈希码值,然后经过运算就可以算出该元素* 在哈希表中的存储位置。* 情况1:如果算出的位置目前没有任何元素存储,那么该元素可以直接添加到哈希表中* * 情况2:如果算出的位置目前已经存在其他元素,那么还会调用该元素的equals方法与这个位置上的元素进行比较* ,如果equals方法返回的是false,那么该元素允许被存储,如果是equals方法返回的是true,那么该元素被视为* 重复元素,不进行存储。* * */class Person{int id;String name;public Person(int id, String name) {super();this.id = id;this.name = name;}@Overridepublic String toString() {return "编号:" + this.id + ",姓名:" + this.name + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + id;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (id != other.id)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}public class Demo05 {public static void main(String[] args) {HashMap<Person,String> map = new HashMap<Person,String>();map.put(new Person(110,"狗娃"), "001");map.put(new Person(220,"狗剩"), "002");map.put(new Person(330,"铁蛋"), "003");map.put(new Person(110,"狗娃"), "007");//如果出现了相同的键,后添加的值会取代之前的值System.out.println(map);}}

package com.shuhuadream.map;import java.util.*;/** 双列集合:* -----------|Map     如果是实现了Map接口的集合类,具备的特点:存储的数据都是以键值对的形式存在的,键不可以重复,值可以重复* --------------|HashMap底层也是基于哈希表实现的* --------------|TreeMapTreeMap也是基于红黑树(二叉树)数据结构实现的,特点:会对元素的键进行排序存储* --------------|Hashtable* * TreeMap要注意的事项:* 1.往TreeMap添加元素,如果该元素的键具备自然顺序,那么就会按照键的自然特性进行排序* 2.往TreeMap添加元素,如果该元素的键不具备自然顺序,那么键所属的类必须要实现Comparable接口,* 把键的比较规则定义在CompareTo方法上。*  2.往TreeMap添加元素,如果该元素的键不具备自然顺序,而且键所属的类也没有实现Comparable接口,* 那么就必须在创建TreeMap对象的时候传入比较器。*/class Emp {//implements Comparable<Emp>{String name;int salary;public Emp(String name, int salary) {super();this.name = name;this.salary = salary;}@Overridepublic String toString() {return "姓名:" + this.name + ", 薪水:" + this.salary + "]";}/*@Overridepublic int compareTo(Emp o) {return this.salary - o.salary;}*/}//自定义比较器class MyComparator implements Comparator<Emp>{@Overridepublic int compare(Emp o1, Emp o2) {// TODO Auto-generated method stubreturn o1.salary-o2.salary;}}public class Demo06 {public static void main(String[] args) {/*TreeMap<Character,Integer> tree = new TreeMap<Character,Integer>();tree.put('a', 23);tree.put('b', 25);tree.put('f', 5);tree.put('c', 45);System.out.println(tree);*///创建一个自定义比较器MyComparator comparter = new MyComparator();TreeMap<Emp,String> tree = new TreeMap<Emp,String>(comparter);tree.put(new Emp("冰冰",2000),"001");tree.put(new Emp("家宝",1000),"002");tree.put(new Emp("习总",3000),"003");tree.put(new Emp("克强",5000),"004");System.out.println(tree);}}



原创粉丝点击