10 HashMap,Map.Entry,LinkedHashMap,TreeMap,Hashtable,Collections类

Map集合的功能概述

  • 添加功能

* V put(K key,V value):添加元素。
            * 如果键是第一次存储,就直接存储元素,返回null
            * 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

  • 删除功能

* void clear():移除所有的键值对元素
        * V remove(Object key):根据键删除键值对元素,并把值返回

  • 判断功能

* boolean containsKey(Object key):判断集合是否包含指定的键
        * boolean containsValue(Object value):判断集合是否包含指定的值
        * boolean isEmpty():判断集合是否为空

  • 获取功能

* Set<Map.Entry<K,V>> entrySet():
        * V get(Object key):根据键获取值
        * Set<K> keySet():获取集合中所有键的集合
        * Collection<V> values():获取集合中所有值的集合

  • 长度功能

* int size():返回集合中的键值对的个数

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class Demo1_Map {

    public static void main(String[] args) {
    /*    Map接口:
            * 将键映射到值的对象
            * 一个映射不能包含重复的键
            * 每个键最多只能映射到一个值
        Map接口和Collection接口的不同
            * Map是双列的,Collection是单列的
            * Map的键唯一,Collection的子体系Set是唯一的
            * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构

是针对元素有效*/
        Map<String, Integer> map = new HashMap<>();
        Integer i1 = map.put("张三", 23);
        Integer i2 = map.put("李四", 24);
        Integer i3 = map.put("赵武", 21);
        Integer i4 = map.put("张三", 24);

/*        System.out.println(map);//{赵武=21, 李四=24, 张三=24}

        System.out.println(i1);//null
        System.out.println(i2);//null
        System.out.println(i3);//null
//        System.out.println(i4);//23  //相同的键不存储,值覆盖,返回被覆盖的值

        Integer value = map.remove("张三"); //根据键删除元素,返回键对应的值
        System.err.println(value);//24
        System.out.println(map);//{赵武=21, 李四=24}

        System.out.println(map.containsKey("李四"));//true
        System.out.println(map.containsValue(21));//true
*/
        Collection<Integer> collection = map.values();//获取所有的值
        System.out.println(collection);//[21, 24, 24]
        System.out.println(map.size());//3  //返回集合中键值得个数

    }

}

Map遍历:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.swing.text.html.parser.Entity;

public class Demo2_Iterator {

    public static void main(String[] args) {
        //遍历Map
        Map<String, Integer> map = new HashMap<>();
        Integer i1 = map.put("张三", 23);
        Integer i2 = map.put("李四", 24);
        Integer i3 = map.put("赵武", 21);
        Integer i4 = map.put("张三", 24);

/*        Set<String> keySet = map.keySet(); //获取所有的键集合
        Iterator<String> iterator = keySet.iterator();
        while(iterator.hasNext()) {
            String key = iterator.next();
            Integer value = map.get(key);
            System.out.println(key+"="+value);
        }*/

        //使用增强for
/*        for(String key:map.keySet()) {
            System.out.println(key+"="+map.get(key));
        }*/

//        //使用Map.Entry
//        //Entry是Map的内部接口
//        //将键和值封装成Entry对象,并存储在Set集合中
//        Set<Map.Entry<String, Integer>> entries = map.entrySet();
//        Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
//        while (iterator.hasNext()) {
//            Map.Entry<String,Integer> entry = iterator.next();//父类引用指向子

类对象
//            String key = entry.getKey();
//            Integer value = entry.getValue();
//            System.out.println(key+"="+value);
//        }

        //改for
        //Entry是Map.Entry的子类对象
        for(Entry<String, Integer> entry:map.entrySet()) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }
    }

}
HashMap存储:
import java.util.HashMap;

import com.fly.bean.Student;

public class Demo3_HashMap {

    public static void main(String[] args) {
        // HashMap存储
        //Student需要重写hashCode(),equals()方法
        HashMap<Student, String> hMap = new HashMap<>();
        hMap.put(new Student("张三",19),"aa");
        hMap.put(new Student("李四",19),"cc");
        hMap.put(new Student("王五",19),"dd");
        hMap.put(new Student("张三",19),"bb");

        System.out.println(hMap);
    }

}

LinkedHashMap:

import java.util.LinkedHashMap;

public class Demo4_LinkedHashMap {

    public static void main(String[] args) {
        LinkedHashMap<String, Integer> lHashMap = new LinkedHashMap<>();
        lHashMap.put("b", 11);
        lHashMap.put("a", 22);
        lHashMap.put("d", 44);
        lHashMap.put("c", 33);

        System.out.println(lHashMap);//{b=11, a=22, d=44, c=33}
    }

}

TreeMap:

import java.util.TreeMap;

import com.fly.bean.Student;

public class Demo5_TreeMap {
    public static void main(String[] args) {
        TreeMap<Student, String> tMap = new TreeMap<>();
        tMap.put(new Student("张三",13), "aa");
        tMap.put(new Student("张三",13), "bb");
        tMap.put(new Student("李四",12), "cc");
        tMap.put(new Student("王五",15), "dd");

        System.out.println(tMap);//{Student [name=李四, age=12]=cc, Student [name=

张三, age=13]=bb, Student [name=王五, age=15]=dd}

        //Student需实现Comparable接口,重写的部分
/*        public class Student implements Comparable<Student> {
            @Override
            public int compareTo(Student o) {
                int num = this.age - o.age;
                return num==0 ? this.name.compareTo(o.name) : num;
            }
        }
        */

    }
}

练习:统计字符串中每个字符出现的次数

import java.util.HashMap;

public class Test1 {

    public static void main(String[] args) {
        // 统计字符串中每个字符出现的次数
        String s = "aaabbbbccccc";
        char[] arr = s.toCharArray();//将字符串转换为字符数组
        // 定义双列集合,存储字符串中字符以及字符出现的次数
        HashMap<Character, Integer> hMap = new HashMap<>();
        for (char c : arr) {
            //有就加1,没有置为1
            hMap.put(c, hMap.containsKey(c) ? hMap.get(c)+1 : 1);
        }
        for (Character key : hMap.keySet()) {
            System.out.println(key+"="+hMap.get(key));
        }

    }

}

集合嵌套之HashMap嵌套HashMap:

import java.util.HashMap;

import com.fly.bean.Student;

public class Demo6_HashMap2 {

    public static void main(String[] args) {
        // 集合嵌套之HashMap嵌套HashMap
        HashMap<Student, String> hMap1 = new HashMap<>();
        hMap1.put(new Student("a",12),"bj");
        hMap1.put(new Student("b",13),"sh");
        hMap1.put(new Student("c",15),"gd");
        hMap1.put(new Student("d",12),"sz");

        HashMap<Student, String> hMap2 = new HashMap<>();
        hMap2.put(new Student("e",12),"bj");
        hMap2.put(new Student("f",13),"sh");
        hMap2.put(new Student("g",15),"gd");
        hMap2.put(new Student("h",12),"sz");

        HashMap<HashMap<Student, String>, String> hashMap = new HashMap<>();
        hashMap.put(hMap1, "1101");
        hashMap.put(hMap2, "1102");

        for (HashMap<Student, String> sk : hashMap.keySet()) {
            System.out.println(hashMap.get(sk));
            for (Student key : sk.keySet()) {
                System.out.println(key+"="+sk.get(key));
            }
        }
    }

}

HashMap和Hashtable的区别:
(面试常考)

import java.util.HashMap;
import java.util.Hashtable;

public class Demo7_Hashtable {

    public static void main(String[] args) {
        /* HashMap和Hashtable的区别
            Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本

出现的,是线程不安全的,效率高
            Hashtable不可以存储null键和null值,HashMap可以存储null键和null值*/
        HashMap<String, Integer> hashMap = new HashMap<>();
        hashMap.put(null, null);
        System.out.println(hashMap);//{null=null}

        Hashtable<String, Integer> hashtable = new Hashtable<>();
//        hashtable.put(null, 1);
//        hashtable.put("a", null);
//        System.out.println(hashtable);//NullPointerException

    }

}

Collections类概述:
针对集合操作 的工具类

  • Collections成员方法

public static <T> void sort(List<T> list) 排序
        public static <T> int binarySearch(List<?> list,T key) 二分查找 找不到返回-

的插入点-1
        public static <T> T max(Collection<?> coll) 根据默认排序结果获取集合中的最

大值
        public static void reverse(List<?> list) 反转
        public static void shuffle(List<?> list) 随机置换

泛型固定下边界与泛型固定上边界:

  • ? super E  ,  E是子类 ?是父类   把子类对象拿出来放到父类的比较器中
  • ? extends E , 泛型固定上边界 ?是任意子类,E是父类固定的 父类集合存放子类对象

原文地址:https://www.cnblogs.com/fly-book/p/9860611.html

时间: 2024-10-06 12:06:19

10 HashMap,Map.Entry,LinkedHashMap,TreeMap,Hashtable,Collections类的相关文章

Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:  * 将键映射到值的对象  * 一个映射不能包含重复的键  * 每个键最多只能映射到一个值 * B:Map接口和Collection接口的不同  * Map是双列的,Collection是单列的  * Map的键唯一,Collection的子体系Set是唯一的  * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 2.Map集合的功能概述 * A:Map集合的功能概述  *

HashMap 、LinkedHashMap、HashTable、TreeMap 和 Properties 的区别

HashMap 1.线程不安全: 2.允许null value 和 null key: 3.访问效率比较高: 4.Java1.2引进的Map接口的一个实现: 5.轻量级: 6.根据键的HashCode()值存储数据的位置: 7.遍历时,取得的数据的顺序是完全随机的: 8.最多允许一条记录的键为空: 9.允许多条记录的值为空: 10.在Map中插入.删除和定位元素,HashMap是较好的选择: LinkedHashMap 1.保存了记录的插入顺序: 2.可以按照插入顺序或应用次数排序: 3.如果需

HashMap,HashTable,LinkedHashMap,TreeMap的区别

1.   Map简介 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值.Map用于存储键值对,根据键得到值,因此不允许键重复,值可以重复. 1.1.  HashMap HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap

Java——(七)Map之HashMap和Hashtable实现类

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Map Map用于具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key, 另一组值用于保存Map里的value,key和value都可以是任何引用类型的数据.Map的key不允许 重复,即同一个Map对象的任何两个key通过equals()方法比较总是返回false. Set与Map之间的关系非常密切.虽然Map中放的元素是key—value对,Set集合中放的元素

Java——(八)Map之LinkedHashMap、TreeMap、EnumMap实现类

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.LinkedHashMap实现类 LinkedHashMap需要维护意识的插入顺序,因此性能略低于HashMap的性能:但因为它以 链表来维护内部顺序,所以在迭代访问Map里的全部元素时将有较好的性能.下面示范了 LinkedHashMap的功能. 1 import java.util.LinkedHashMap; 2 3 public class LinkedHashMapTest {

HashMap,LinkedHashMap,TreeMap的区别(转)

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复.Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的.HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致.如果需要同步,可以用 Collections的synchronizedM

HashMap,LinkedHashMap和Hashtable类的深入剖析与理解

上一篇文章写了一些关于HashMap以及HashMap的线程安全问题,这篇文章再来说说Map系列中HashMap,LinkedHashMap和Hashtable三者之间的差异以及该注意的地方. HashMap的该注意的地方就不赘述了,上一篇已经描述过了. 一,LinkedHashMap的知识点 从类名上理解,这个类是个链表HashMap,这个类继承了HashMap,重写了父类的一些方法.关于LinkedHashMap,有以下注意的地方: LinkedHashMap的初始默认容量为16,载入因子为

HashMap,LinkedHashMap,TreeMap之间的区别

Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致.如果需要同步,可以用Collections的synchronizedMap方法使HashMap具

Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等

1.Set和Map的关系: Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个key-value对组成的集合. Set的集合继承体系: Map关系集合 Map集合的key特征:所有key不能重复,key之间没有顺序.Map集合的所有key将具有set集合的特征. 对Set做改造可将Set改造成Map集合: 2.HashSet和HashMap的区别和联系:    对于HashSet,系统采用Hash算法决定集合元素的存储位置:对于HashMap,系统将value当成key的附属物,系