Java 集合Map(二)

Map

       1,Map集合存储的键值对元素,键是唯一的,而值可以重复。

        2,Map集合的功能:

                          添加:

                               V put(K key,V value)

                          判断:

                              V containsKey(K key)  判断集合是否有指定的键。

                              K containsValue(V value)  判断集合是否有指定的值。

                          删除:

                                 remove(K key)

                          获取:

                             V get(K key)  根据指定的键,找到对应的值。

                             Set<K> keySet() 返回键的Set集合。

                             Collection<V>values() 返回值的Collection集合。

                             Set<Map.Entry<K,V>> entrySet()  返回的是键值对对象的集合。

                          长度:

                             size()

         3,Map的数据结构问题

                       Map集合的数据结构对键有效,跟值无关。

                       底层数据结构跟Set一致。

                               如果是哈希表结构,就需要重写hashCode()和equals()方法。

                               如果是二叉树结构,就有两种方式:Comparable,Comparator。

        4,Map的遍历方式:

                        假设有一个HashMap集合对象存储的都是String类型,名称叫hm。

                       1,根据键找值:

                                  a ,获取所有集合。

                                  b ,遍历所有集合,获取到每一个键。

                                  c ,根据键找值。

//示例
Set<String> set=hm.keySet();
for(String key : set){
    String value=hm.get(key);
    System.out.println(value+"-"+key)
}

                     2,根据键值对对象找键和值

                               a ,获取所有键值对对象。

                               b ,遍历所有键值对对象集合,获取每一个键值对对象。

                               c ,根据键值对对象,找到键和值 。

//示例
Set<Map.Entry<String,String>> set=hm.keySet();
for(Map.Entry<String,String> me:set){
    String key=me.getKey();
    String value=me.getValue();
    System.out.println(key+""+value);
}

            5,Map集合的体系

                       Map

                         |-----HashMap

                                     |-----LinkedHashMap

                         |-----Hashtable

                         |-----TreeMap

                       1,HaspMap和Hashtable的区别?

                                HaspMap线程不安全(不同步),效率高,允许null键和值。JDK1.2

                                Hashtable线程安全(同步),效率低, 不允许null键和值。JDK1.0

                       2,LinkedHashMapr的键的特点?

                                 底层数据结构是链表和哈希表

                                 键有序,唯一。

            6,Map和Collection的区别?

                        Map是双列集合,存储的是键值对,键唯一,值可以重复。

                        Collection是单列集合,存储的元素是单一的,键唯一,值可以重复。

            7,注意:

                        如果使用了一个JDK提供了类的名称,那么在使用JDK的类的时候,需要加入包的前缀

//示例
java.util.HashMap<String,String> hm=new java.util.HashMap<String,String>();

             

            8,案例:

                

                         需求:

                      1,"cbxzbvavdvgd"获取字符串中,每一个字母出现次数:"a(1)b(2)c(1)d(2)g(1)v(3)x(1)z(1)"。

                         

                      思路:

                           1,定义一个字符串。

                           2,将字符串转成字符数组。

                           3,定TtreeMap集合。

                           4,遍历字符数组,获取每一个字符。

                           5,拿每一个第一次出现的字符作为键,对TreeMap集合中查找值。

                                      返回null,说明不存在,存储一次,并且记为1。

                                      不为null,说明已经存在过,把值+1,然后重新存储。

                           6,把TreeMap集合的元素遍历并拼接成满足需求的字符串。

                           7,输出字符串。

//示例
String str="cbxzbvavdvgd";
char[] chs=srt.toCharArray();
TreeMap<Character,Ingeter> tm=new TreeMap<Character,Integer>();
for(char ch:chs){
    Ingeter i=tm.get(ch);
    if(i==null){
        tm.put(ch,1);
    }else{
        i++;
        tm.put(ch,i);
    }
}
StringBuilder sb=new StringBuiler();
Set<Character> set=tm.keySet();
for(Character key:set){
    Integer value=tm.get(key);
    sb.append(key).append("(").append(value).append(")");
}
String result=sb.toString();
System.out.println(result);

                     2,Map集合的嵌套及遍历

                     school

                         |--team1

                                |--t101 tom

                                |--t102 june

                         |--team2

                                |--t201 mary

                                |--t202 joden

                     思路:

                              1,创建集合对象

                              2,创建元素对象

                              3,元素对象添加到集合对象中

                              4,遍历

//示例
HashMap<String,HashMap<String,String>> school=new HashMap<String,HashMap<String,String>>();

HashMap<String,String> team1=new HashMap<String,String>();
team1.put("t101","tom");
team1.put("t102","june");

HashMap<String,String> team2=new HashMap<String,String>();
team2.put("t201","mary");
team2.put("t202","joden");

school.put("team1",team1);
school.put("team2",team2);

Set<String>  set=school.keySet();
for(String key:set){
    HashMap<String,String> hmkey=school.get(key);
    Set<String> hm=hmkey.keySet();
    for(String hmkey: hm){
        String value=hm.get(hmkey);
        System.out.println(”	“+hmkey+"-"+value);
    }
    
}

Collections

                1,是针对集合操作的工具类。

                2,常见功能:

                         排序

                                  sort()

                         二分查找

                                  binarySearch()

                         最大值 

                                  max()

                         反转

                                 reverse()

                         随机置换

                                shuffle()

                3,Collection和Collections的区别?

                          Collection是单列集合的顶层接口

                          Collections是针对集合操作的工具类。

               4,如果造一个线程安全的集合?

//示例
ArrayList<String> list=synchronizedList(new ArrayList<String>());
            

                   

------------------------------------------------------------               

集合总结:

           应用场景:

                    是否键值对

                        |---是

                              |---Map

                                      |---是否排序

                                                |---是

                                                       |---TreeMap                                             

                                                |---否

                                                       |---HashMap

                                                  

                        |---否

                              |---Collection

                                         |---是否唯一

                                                  |---是

                                                        |---Set

                                                                |---是否排序

                                                                          |---是

                                                                                 |---TreeSet

                                                                          |---否 

                                                                                 |---HashSet

                                                  |---否

                                                         |---增删多

                                                                   |---LinkedList

                                                         |---查询多

                                                                   |---ArrayList

---------------------------------------------------------------------------

集合体系总结:

                 集合

                    |---Collection

                                |---List

                                       |---ArrayList

                                                |---底层数据结构是数组

                                                |---线程不同步,不安全,效率高。查询快,增删慢。

                                       |---Vector

                                                |---底层数据结构是数组

                                                |---线程同步,安全,效率低。查询快,增删慢。

                                       |---LinkedList

                                                |---底层数据结构是双向循环链表

                                                |---线程不同步,不安全,效率高。查询慢,增删快。

                                |---Set

                                       |---HashSet

                                                 |---底层数据结构是哈希表

                                                 |---如何保证唯一性?

                                                                    |---依赖hashCode()与equals()

                                                                                   |---执行顺序

                                                                                             |---先判断hashCode()是否相同?

                                                                                                                    |---是

                                                                                                                           |---继续走equals(),返回值

                                                                                                                                         |---true

                                                                                                                                                |---元素重复,不添加

                                                                                                                                         |---false

                                                                                                                                                |---元素不重复,添加

                                                                                                                    |---否

                                                                                                                           |---直接添加

                                       |---TreeSet

                                                |---底层数据结构是二叉树

                                                |---如何保证唯一性?

                                                           |---根据返回值是否为0

                                                |---如何排序

                                                           |---自然排序:Comparable

                                                           |---比较器排序:Comparator

                    |---Map

                            |---HashMap

                                       |---LinkedHashMap

                            |---Hashtable

                            |---TreeMap

原文地址:https://www.cnblogs.com/zhanfuxing/p/3643724.html