Map集合:
该集合存储键值对。一对一往里存。而且要保证键的唯一性。
当有映射关系的元素时,考虑建立Map集合。
方法摘要:
1.添加:如果添加时,出现相同的键。那么后添加的值会覆盖原有键对应值,并且put方法会返回被覆盖的值。
put(K key,V value)
putAll(Map< ? Extends k, ? extends V> m)
2.删除
clear( )
remove ( Object key)
3.判断
containValue ( Object value)
containsKey ( Object key)
isEmpty ( )
4.获取
get ( Object key ):可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。
size ( )
values ( )
entrySet ( )
keySet ( )
Map体系:和Set很像。Set底层就是使用了Map集合。
Map
|——Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。JDK1.0。效率低。
|——HashMap:底层是哈希表数据结构,允许使用null键null值。该集合是不同步的。JDK1.2。效率高。
|——TreeMap:底层是二叉树数据结构,线程不同步。可以用于给map集合中的键进行排序。
Map集合的两种取出方式:
Map集合的取出原理:将Map集合转成Set集合。再通过迭代器取出。
1.Set<k> keySet:将Map中所有的键存入到Set集合。因为Set具备迭代器,所以可以迭代方式取出所有的键,在根据get方法获取每一个键对应的值。
图解:
2.Set<Map.Entry<k,v>>entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry。
entrySet()方法将map集合中的映射关系取出。这个关系就是Map.Entry类型。那么关系对象Map.Entry获取到后,就可以通过Map.Entry中getKey和getValue方法获取关系中的键和值
图解:
代码:
//import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapDemo { /** * @map方法的演示。 */ public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>();//Map不是一个具体的集合类。 //添加元素。 map.put("01","zhangsan1"); map.put("02", "zhangsan02"); map.put("03", "zhangsan03"); //System.out.println(map.put("03", "zhangsan033"));//map后添加的值会覆盖以前的值,并且会返回被覆盖的值。 map.put("04", null); //删除元素。 //System.out.println(map.remove("02")); //map.clear();//clear()没有返回值 //获取元素 //System.out.println(map.get("04"));//根据指定键获取值,如果没有这个键值对,返回null。 //Collection<String> coll=map.values(); //获取map中的值。将这些值存到Collection集合中。 //取出元素 //第一种方法,将map的键值存到set集合中。迭代取出key值,再根据键值取出值。 /*Set<String> keyset=map.keySet(); for(Iterator<String> it=keyset.iterator();it.hasNext();)// { String key=it.next(); String value=map.get(key); System.out.println("key="+key+",value="+value); }*/ //第二种方法。将Map的映射关系取出。存入到Set集合中。 Set<Map.Entry<String, String>> entry=map.entrySet(); for(Iterator<Map.Entry<String, String>> it=entry.iterator();it.hasNext();) { Map.Entry<String, String> me=it.next(); String key=me.getKey(); String value=me.getValue(); System.out.println(key+":"+value); } //System.out.println(coll); } }
package day16; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class StudentMap { /** * @Map中装Student对象为key,相应地址为value。 */ public static void main(String[] args) { HashMap<Student,String> hm=new HashMap<Student,String>(); hm.put(new Student("zhangsan01",20), "beijing"); hm.put(new Student("zhangsan01",20), "beijing"); hm.put(new Student("zhangsan02",22), "shanghai"); hm.put(new Student("zhangsan03",23), "tianjin"); Set<Map.Entry<Student,String>> hs=hm.entrySet(); for(Iterator<Map.Entry<Student,String>> it=hs.iterator();it.hasNext();) { Map.Entry<Student, String> me=it.next(); Student stu=me.getKey(); String add=me.getValue(); System.out.println(stu+"^"+add); } } } class Student implements Comparable<Student> { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } Student(String name,int age) { this.name=name; this.age=age; } public int compareTo(Student s)//排序根据。 { int num=new Integer(this.age).compareTo (new Integer(this.age)); if(num==0) return this.name.compareTo(s.name); return num; } public int hashCode()//要重写hashCode方法。尽量让每个元素的返回值不同。 { return name.hashCode()+age*10; } public boolean equals(Student s)//重写equals方法。 { return this.name.equals(s.name)&&(this.age==s.age); } public String toString()//打印对象需要调用这个方法。 { return name+":"+age; } }
import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class CharCount { /** * @统计字符串中字母出现的次数并存入集合 */ public static void main(String[] args) { String str="aldjflasdfoqwnieonvaospnfieo"; System.out.println(charCount(str)); } public static String charCount(String str) { char[] chs=str.toCharArray(); TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>(); int count=0; for(int x=0;x<chs.length;x++) { if(!(chs[x]>='a'&&chs[x]<='z'||chs[x]>='A'&&chs[x]>='Z')) continue; Integer value=tm.get(chs[x]); if(!(value==null)) { count=value; } count++; tm.put(chs[x], count); /*if(value==null) { tm.put(chs[x], 1); } else { value++; tm.put(chs[x], value); }*/ count=0; } StringBuffer sb=new StringBuffer(); Set<Map.Entry<Character,Integer>> entryset=tm.entrySet(); for(Iterator<Map.Entry<Character,Integer>> it=entryset.iterator();it.hasNext();) { Map.Entry<Character,Integer> me=it.next(); Character ch=me.getKey(); Integer in=me.getValue(); sb.append(ch+"("+in+")"); } return sb.toString(); } }