java-16(3)-Map集合

来源:互联网 发布:大连东华软件股份公司 编辑:程序博客网 时间:2024/06/05 21:36

1.Map集合

一次添加一对元素,称为双列集合,Collection一次存储一个元素,称为单列集合。其实Map集合中存储的是键值对,Map集合必须保证键的唯一性。

2.Map集合常用的方法:

1.添加:    value put(key,value);返回前一个和key关联的值,如果没有就返回null.2.删除:    void clear();清空map集合    value remove();根据指定的key删除这个键值对,并返回值。3.判断:    boolean containsKey(key);    boolean containsValue(value);    boolean isEmpty();4.获取;    value get(key);    通过键拿值,如果没有该键就返回null;可以通过返回null,来判断是否包含指定键。    int size();获取键值对的个数。

3.Map集合如何取出元素。

在Map集合中是没有迭代器的,所以它要取出元素,必须经过一系列的转化。这里有三种方式:1.Collection<V> values();返回此映射中包含的值得Collection视图。2.Set<V> KeySet();返回此映射中包含键的Set视图。3.Set<Map.Entry<K,V>> entrySet();返回此映射中包含的映射关系的Set视图。   
public static void main(String[] args){        Map<Integer,String> map = new HashMap<>();        method1(map);        method2(map);        method3(map);    }

(1).Collection values();方式

public static void method1(Map<Integer, String> map) {  map.put(8,"WangWu");  map.put(2,"Zhaoliu");  map.put(7,"XiaoQiang");  map.put(6,"WangCai");   Collection<String> values = map.values();  for(Iterator<String> it = values.iterator();it.hasnext;){      System.out.println(it.next());  }}

(2)

/*Set<Map.Entry<K,V>> entrySet();原理:该方法将键和值的映射关系作为对象存储到Set集合中,而这个映射关系的类型就是Map.Entry类型。*/public static void method2(Map<Integer, String> map) {  map.put(8,"WangWu");  map.put(2,"Zhaoliu");  map.put(7,"XiaoQiang");  map.put(6,"WangCai");   Set<Map.Entry<Integer,String>> keySet = map.entrySet(); for(Iterator<Map.Entry<Integer,String>> it = keySet.iterator();it.hasnext;){     Map.Entry<Integer,String> me = it.next();     Integer key = me.getKey();     String value = me.getValue(key);     System.out.println(key+":"+value);  }}

(3)

/*Set<V> KeySet();原理:通过keySet方式获取map中所有的键所在的set集合,再通过Set的迭代器获取到每一个键,再对每一个键获取对应的值即可。*/public static void method2(Map<Integer, String> map) {  map.put(8,"WangWu");  map.put(2,"Zhaoliu");  map.put(7,"XiaoQiang");  map.put(6,"WangCai");   Set<Integer> keySet = map.keySet(); for(Iterator<Integer> it = keySet.iterator();it.hasnext;){     Integer key = it.next();     String value = map.get(key);     System.out.println(key+":"+value);  }}

4 Map常用的子类:

HashTable:内部数据结构是哈希表是同步的,不允许null作为键,null作为值。  Properties:用来存储键和值对型的配置文件的信息,可以与IO技术相结合。HashMap:内部数据结构是哈希表,不同步。不允许null作为键,null作为值。 LinkedHashMap:内部数据结构是链表和哈希表,可以实现存取一致(顺序)。TreeMap:内部数据结构是二叉树,不同步。可以对集合中的键进行排序。

5.MapTest

/** 练习* "fdgavcbsacdfs"获取该字符串中,每一个字母出现的次数。* 要求打印结果为:a(2)b(1)...* 思路;* 1.首先 因为操作的是字符串中的字母,所以将字符串转换为字符数组。* 2.然后观察到字母和该字母出现的次数存在一一对应的关系。这里可以想到用Map或者数组。但是出现的次数是无序的,所以要使用Map集合。* 又因为打印结果是按照一定顺序的,所以想到TreeMap集合,字母作为键,出现的次数作为值。* 3.把字符数组中的每个元素取出查Map表,如果该键没有在表中,则把该键和对应的值(1)存入。如果该键存在,那么将该键对应的值取出自增1后,* 再存入Map表中。* 4.当字符数组遍历完成后,Map表中就存储了全部字母出现的次数。* 5.然后把Map表按照特定的方式转成字符串输出。***/    public static void main(String[] args){        String str = "fdg3//avi249cccb++sac565dfs";        str = getCharCount(str);        System.out.println(str);    }    public static String getCharCount(String str) {        //将字符串转为字符数组。        char[] chs = str.toCharArray();        //创建Map表        TreeMap<Character,Integer> map = new TreeMap<>();        //取出元素进行查表        for (int i = 0; i < chs.length; i++) {            if (!(chs[i] >= 'a' && chs[i] <= 'z')||(chs[i] >= 'A' && chs[i] <= 'Z')) {                continue;            }            Integer value = map.get(chs[i]);            if ( value == null){                //表中没有该元素,直接插入。                map.put(chs[i],1);            }else{                //表中存在该元素,把value取出+1然后在进行存入                map.put(chs[i],++value);            }        }        //把map表转为特定的字符串        String st = getMapSring(map);        return st;    }    private static String getMapSring(TreeMap<Character, Integer> map) {        StringBuilder sb = new StringBuilder();        //遍历map表        /*for (Iterator<Map.Entry<Character,Integer>> it = map.entrySet().iterator();it.hasNext();){            Map.Entry<Character,Integer> me = it.next();            Character key = me.getKey();            Integer value = me.getValue();            sb.append(key+"("+value+") ");        }*/        //遍历map表foreach        for (Map.Entry<Character,Integer> me:map.entrySet()) {            Character key = me.getKey();            Integer value = me.getValue();            sb.append(key+"("+value+") ");        }        return sb.toString();    }
原创粉丝点击