码迷,mamicode.com
首页 > 其他好文 > 详细

Collection单列集合 Map双列集合

时间:2015-08-02 10:10:20      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

Map集合:该集合存储键值对,一对一对往里存。而且要保证键的唯一性。
1、添加
  put(K key, V value)
  putAll(Map<? extends K,? extends V> m)
2、删除
  clear()
  remove(Object key)
3、判断
  containsKey(Object key)
  containsValue(Object value)
  isEmpty()
4、获取
  get(Object key) :获取值
  size()
  values()
  entrySet()
  keySet()

 

Map
  !--Hashtable :底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。JDK1.0,效率低。
  !--HashMap :底层是哈希表数据结构,允许使用null键和null值,该集合是不同步的。JDK1.2效率高。
  !--TreeMap :底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序。
和Set很像
其实,Set底层就是使用了Map集合。

技术分享
public class MapDemo {

    public static void main(String[] args) {
        
        Map<String,String> map = new HashMap<String,String>();
        
        //添加元素,如果出现添加时,相同的键,那么后添加的值会覆盖原有键对应值,
        //并put方法会返回被覆盖的值。
        System.out.println("put:"+map.put("01", "zhangsan1"));
        System.out.println("put:"+map.put("01", "wangwu"));
        map.put("02", "zhangsan2");
        map.put("03", "zhangsan3");
        
        System.out.println("containKey:"+map.containsKey("022"));
        //System.out.println("removeKey:"+map.remove("02"));
        
        System.out.println("get:"+map.get("02"));
        
        //map.put(null, "haha");
        map.put("04", null);
        System.out.println("get:"+map.get("04"));
        //可以通过ge方法的返回值来判断一个键是否存在。通过null返回来判断
        
        //获取map集合中所有的值
        Collection<String> coll = map.values();
        System.out.println(coll);
        System.out.println(map);
    }

}
MapDemo

map集合的两种取出方式:
1、Set<k> keySet:将map中所有的键存入到Set集合中,因为Set具备迭代器,
  所以可以使用迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。

Map集合的取出原理:将Map集合转成Set集合,再通过迭代器取出。

2、Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到set集合中,
  而这个关系的数据类型就是:Map.Entry

技术分享
public class MapDemo2quzhi {

    public static void main(String[] args) {
        
        Map<String,String> map = new HashMap<String,String>();
        map.put("02", "zhangsan2");
        map.put("03", "zhangsan3");
        map.put("01", "zhangsan1");
        map.put("04", "zhangsan4");
        //将Map集合中的映射关系取出,存入到Set集合中。
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        
        Iterator<Map.Entry<String, String>> it = entrySet.iterator();
        
        while(it.hasNext())
        {
            Map.Entry<String, String> me = it.next();
            String key = me.getKey();
            String value = me.getValue();
            
            System.out.println(key+":"+value);
        }
        
        /*
        //先获取map集合的所有键的Set集合,keySet();
        Set<String> keySet = map.keySet();
        
        //有了Set集合,就可以获取迭代器
        Iterator<String> it = keySet.iterator();
        
        while(it.hasNext())
        {
            String key = it.next();
            //有了键可以通过map集合的get方法获取其对应的值。
            String value = map.get(key);
            System.out.println("key:"+key+",value:"+value);
        }
        */
    }

}
/*
Map.Entry  其实Entry也是一个接口,它是Map接口中的一个内部接口
        有Map才有Entry,所以定义内部类
interface Map
{
    public static interface Entry
    {
        public abstract Object getKey();
        public abstract Object getValue();
    }
}
 
class HashMap implements Map
{
    class haha implements Map.Entry
    {
        public Object getKey(){}
        public Object getValue(){}
    }
}
*/
MapDemo2quzhi

mao扩展知识。    一对多关系!

技术分享
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

/*
mao扩展知识。    一对多关系!

map集合被使用是因为具备映射关系。

"yureban"   Student("01" "zhangsan");
"yureban"   Student("02" "lisi");
"jiuyeban"  Student("01" "wangwu");
"jiuyeban"  Student("02" "zhaoliu");

一个学校有多个教室,每个教室都有一个名称。
 */
class Student1
{
    private String id;
    private String name;
    Student1(String id,String name)
    {
        this.id = id;
        this.name = name;
    }
    public String toString()
    {
        return id+"::"+name;
    }
}
public class MapDemo3_kuozhan {
    
    public static void demo()
    {
        HashMap<String,List<Student1>> czbk = new HashMap<String,List<Student1>>();
        
        List<Student1> yure = new ArrayList<Student1>();
        List<Student1> jiuye = new ArrayList<Student1>();
        
        yure.add(new Student1("01","zhagnsan"));
        yure.add(new Student1("04","wangwu"));
        yure.add(new Student1("01","zhouqi"));
        yure.add(new Student1("02","zhaoliu"));
        
        czbk.put("yureban", yure);
        czbk.put("jiuyeban", jiuye); 
        
        Iterator<String> it = czbk.keySet().iterator();
        
        while(it.hasNext())
        {
            String roomName = it.next();
            List<Student1> room = czbk.get(roomName);
            
            //System.out.println(roomName);
            getInFos(room);
        }
    }
    public static void getInFos(List<Student1> list)
    {
        Iterator<Student1> it = list.iterator();
        while(it.hasNext())
        {
            Student1 s = it.next();
            System.out.println(s);
        }
    }

    public static void main(String[] args) {
        demo();
        //教室
        /*
        HashMap<String,HashMap<String,String>> czbk = new HashMap<String,HashMap<String,String>>();
        
        HashMap<String,String> yure = new HashMap<String,String>();
        
        HashMap<String,String> jiuye = new HashMap<String,String>();
        
        czbk.put("yureban", yure);
        czbk.put("jiuyeban", jiuye);
        
        yure.put("01", "zhangsan");
        yure.put("02", "lisi");
        
        jiuye.put("01", "wangwu");
        jiuye.put("02", "zhaoliu");
        
        //取出学校所有学生,遍历czbk集合,获取所有的教室
        Iterator<String> it = czbk.keySet().iterator();
        
        while(it.hasNext())
        {
            String roomName = it.next();
            HashMap<String,String> room = czbk.get(roomName);
            
            //System.out.println(roomName);
            getStudentOf(room);
        }
        //取出某个班级所有学生
        //getStudentOf(jiuye);
        */

    }
    public static void getStudentOf(HashMap<String,String> roomMap)
    {
        Iterator<String> it = roomMap.keySet().iterator();
        
        while(it.hasNext())
        {
            String id = it.next();
            String name = roomMap.get(id);
            System.out.println(id+":"+name);
        }
    }

}
MapDemo3_kuozhan
技术分享
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/*
练习:
"sdfgzxcvsdfxcdf"获取该字符串中的字母出现的次数。

希望打印结果:a[1]c[2]......

通过结果发现,每一个字母都有对应的次数。
说明字母和次数之间都有映射关系、

注意了,当发现有映射关系时,可以选择Map集合。
因为map集合中存放的就是映射关系。

什么时候使用map集合呢?
当数据之间存在着映射关系时,就要先想到map集合。

思路:
1、将字符串转换成成字符数组,因为要对每一个字母进行操作。
2、定义一个map集合,因为打印结果的字母有顺序,所以使用TreeMap集合。
3、遍历字符数组。
    将每一个字母作为键去查map集合,
    如果返回是null,将该字母和1存入到map集合中。
    如果返回不是null,说明该字母在map集合已经存在并有对应次数。
    那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合中,
    覆盖调用原来键所对应的值。
4、将map集合中的数据变成指定的字符串形式返回。 
    

 */
public class MapTest3zimu {

    public static void main(String[] args) 
    {    
        String s = charCount("aabfcdabc+d-efa");
        System.out.println(s);
    }
    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);
            count = 0;
            /* 方法二
            if(value==null)
            {
                tm.put(chs[x], 1);
            }
            else
            {
                value = value +1;
                tm.put(chs[x], value);
            }
            */
        }
        //System.out.println(tm);
        
        //缓冲区  希望打印结果:a(4)b(2)c(2)d(2)e(1)f(2)......
        StringBuilder sb = new StringBuilder();
        
        Set<Map.Entry<Character, Integer>> entrySet = tm.entrySet();
        Iterator<Map.Entry<Character, Integer>> it = entrySet.iterator();
        while(it.hasNext())
        {
            Map.Entry<Character, Integer> me = it.next();
            Character ch= me.getKey();
            Integer value = me.getValue();
            sb.append(ch+"("+value+")");
        }
        return sb.toString();
    }

}
MapTest3zimu

 

Collection单列集合 Map双列集合

标签:

原文地址:http://www.cnblogs.com/cailingsunny/p/4695179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!