JAVA 15 (Map)

Map集合:该集合存储键值对,一对一对往里存,并且要保证键的唯一性。只要方法

当数据直接存在着映射关系,就要使用map集合。
    1,添加。
        put(K,V)
        putAll()
    2,删除。
        remove(Objiect key)
        clear()
    3,判断。
        boolean containsKey()
        boolean containsValue()
        isEmpty()
    4,获取。
        v get(Object key)
        size()
        values():返回所有值的集合
 
        map集合取出的两种方式:
        keySet():将map中所有键存入set集合(返回值为set类型),因为set具有迭代器,所以可以利用迭代器取出所有键,来获取每一个值。详见例二。
        Set<Map.Entry<k,v>>    entrySet():将map集合中的映射关系取出存入到set中,用迭代器,迭代器读取的值为:      
        Map.Entry 其实Entry也是一个接口,他是Map借口中的内部接口,
    详见例三:
    Map.Entry<String, String> me = it.next(); //迭代器指定好了泛型。
    String value = me.getValue();
    String key = me.getKey();
    sop("key:"+key+" value:"+value);
 
 
Map
        |--Hashtable:底层是哈希表数据结构,不可以存入null作为键或值。该集合是 线程同步的。
        |--HashMap:底层是哈希表数据结构,允许使用null值和键,该集合是不同步的,效率高。
        |--treeMap:底层是二叉树数据结构,线程不同步。可以用于给map集合中的键进行排序。
 
Map扩展知识:
Map被使用是因为具有映射关系。
 
 
 
常见方法举例:
 
import java.util.*;
public class Test {
 
 public static void main(String[] args)
 {
   Map<String,String> map = new HashMap<String,String>();
   
   //添加元素
   
   map.put("01","zhangsan1");
   map.put("02","zhangsan2");
   map.put("03","zhangsan3");
   map.put("04","zhangsan4");
   
   //判断
   sop(map.containsKey("88"));
   sop(map.containsKey("01"));
   
   //删除
   //sop("remove:"+map.remove("01"));
   
   //获取
   sop("get:"+map.get("03"));
   //获取所有值,返回类型为集合
   sop("value"+map.values());
 
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}
 
 
例二:
import java.util.*;
public class Test {
 
 public static void main(String[] args)
 {
   Map<String,String> map = new HashMap<String,String>();
   
   //添加元素
   
   map.put("01","zhangsan1");
   map.put("02","zhangsan2");
   map.put("03","zhangsan3");
   map.put("04","zhangsan4");
   
   Set<String> keyset=map.keySet();
   
   Iterator<String> it =keyset.iterator();
   
   while(it.hasNext())
   {
    String key=it.next();
    sop("value:"+map.get(key));//有了键就可以通过get()方法获取值
   }
 
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}
 
例三:
import java.util.*;
import java.util.Map.Entry;
public class Test {
 
 public static void main(String[] args)
 {
   Map<String,String> map = new HashMap<String,String>();
   
   //添加元素
   
   map.put("01","zhangsan1");
   map.put("02","zhangsan2");
   map.put("03","zhangsan3");
   map.put("04","zhangsan4");
   
   Set<Map.Entry<String, String>> et = map.entrySet();
   Iterator<Map.Entry<String, String>> it =et.iterator();
   while(it.hasNext())
   {
    Map.Entry<String, String> me = it.next();
    String value = me.getValue();
    String key = me.getKey();
    sop("key:"+key+" value:"+value);
   }  
   
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}
 
 
 
 
例三:
定义要添加到集合中对象的时候,需要复写一些方法。
 
import java.util.*;
import java.util.Map.Entry;
public class Test {
 
 public static void main(String[] args)
 {
    TreeMap<Student,String> tm = new TreeMap<Student,String>(new Com());
    tm.put(new Student("alisi1",21), "shanghai");
    tm.put(new Student("alisi1",21), "shanghai");
    tm.put(new Student("blisi4",24), "shanghai");
    tm.put(new Student("clisi6",26), "shanghai");
    tm.put(new Student("dlisi2",22), "shanghai");
    tm.put(new Student("elisi3",23), "shanghai");
    tm.put(new Student("flisi5",25), "shanghai");
   
    Set<Map.Entry<Student, String>> en = tm.entrySet();
    Iterator<Map.Entry<Student, String>> it =en.iterator();
    while(it.hasNext())
    {
     Map.Entry<Student, String> me =it.next();
     Student stu=me.getKey();
     String adr=me.getValue();
     sop(stu+"..."+adr);
    }
   
   
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}
 
class Student implements Comparable<Student>
{
 private String name;
 private int age;
 public int compareTo(Student s)   //添加到TreeSet TreeMap时会用到的方法
 {
  int num = new Integer(this.age).compareTo(new Integer(s.age));
  if(num==0)
   return this.name.compareTo(s.name);
  return num;
 }
 Student(String name,int age)
 {
  this.name=name;
  this.age=age;
 }
 public String getName()
 {
  return name;
 }
 
 public int getAge()
 {
  return age;
 }
 public String toString() //getKey的时候会执行的方法
 {
  return name+":"+age;
 }
 
 public int hashCode() //添加到HashSet HashTree时会执行到
 {
  return name.hashCode()+age*34;
 }
 /*
 public boolean equals(Object obj)   //添加到集合类型中会检查是否重复元素的时候会用到
 {
 
  if(!(obj instanceof Student))
   throw new RuntimeException();
  else
   Student s =(Student)obj;
  return this.name.equals(s.name)&&this.age=s.age;
 }*/
}
 
class Com implements Comparator<Student>  //集合自身的比较器
{
 public int compare(Student st1,Student st2)
 {
  int num = st1.getName().compareTo(st2.getName());
  if (num==0)
  return new Integer(st1.getAge()).compareTo(new Integer(st2.getAge()));
  else
   return num;
 }
}
 
 
练习,获取字符串中每一个字母出现的次数:
利用字母和次数一一对应,并且是按字典序,所有选用TreeMap数据结构
 
import java.util.*;
import java.util.Map.Entry;
public class Test {
 
 public static void main(String[] args)
 {
  String s="aadasjsdhfjsdhfiuasdasddsfds";
  char a[] = s.toCharArray();
  TreeMap<Character,Integer> mp = new TreeMap<Character,Integer>();
  for(int x=0;x<a.length;x++)
  {
   if(mp.containsKey(a[x]))
   {
    int t=mp.get(a[x]);
    t++;
    mp.put(a[x], t);
   }
   else
   {
    mp.put(a[x], 1);
   }
  }
 
  sop(mp);
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}
 
 
posted @ 2015-09-30 16:42  hitz&x  阅读(181)  评论(0)    收藏  举报