Day18-1.Map集合实现类 、Collections工具类

1 Map集合实现类

  1. 概述:Map集合为双列集合的顶层接口,底层根据不同的实现方式,有不同的实现类
  2. 实现类:
    TreeMap和HashMap

2 TreeMap集合

  1. 概述:是一个双列集合,是Map集合的实现类
  2. 特点:
    (1)集合中的key值是唯一的,元素是无序的
             key值唯一的原理和TreeSet原理相同
             元素排序的方式,是根据key来实现排序,排序的方式和TreeSet方式一样
    (2)TreeSet集合和TreeMap集合的关系:
             TreeSet集合底层是由TreeMap实现的

3 HashMap集合

  1. 概述:是一个双列集合,属于map集合的实现类。
  2. 特点:
    (1)集合中的key值不可以重复,元素是无序的
             key值去重和无序的原理,跟昨天讲的HashSet一样
             通过key的哈希值来实现存储和取出

(2)HashSet集合和HashMap集合的关系:
               HashSet集合底层是由HashMap集合实现的

4 LinkedHashMap集合

  1. 概述:是一个双列集合,是HashMap集合的子类
  2. 特点:
    (1)本类没有特殊的方法,只能使用父类中继承的
    (2)集合中元素有序(存入和取出)
    可以跟根据key值保证元素的有序,可以记录下一个key的地址
    (3)集合中的key值唯一

5 练习

键盘录入一个字符串,统计每个字符出现的次数,并按照指定格式进行输出(按照元素录入字符的顺序输出)
例如,录入数据为:aaaabbccddd!@#@#KaTeX parse error: Expected 'EOF', got '#' at position 2: @#̲%cc66ff
打印出来:a有4个,b有2个,c有4个,d有3个,!有1个,@有3个,$有2个,% 有1个,6有2个,f有2个

代码

package demos2_map;

import java.util.LinkedHashMap;
import java.util.Map;

public class Test02 {
    public static void main(String[] args) {
        //统计一个字符串中   字符---个数
        //1、每一个字符和对应的个数都是一一对应的映射关系:想到使用,map
        //2、获取字符串中的每一个字符:
        //   判断该字符和次数  在map集合中有没有存储过
        //                  如果有存储过,表示需要将之前该字符对应个数取出+1,再存入
        //                  如果没有存储过,表示需要将该字符当做key,将1当做value存储到集合
        LinkedHashMap<Character,Integer> lin = new LinkedHashMap<>();
        String str = "aaaabbccddd!@#@#$@#$%cc66ff";
        for(char c:str.toCharArray()){
            if(lin.containsKey(c)){
                lin.put(c,lin.get(c)+1);
            }else{
                lin.put(c,1);
            }
        }

        //遍历存储过的字符和个数关系
        StringBuilder sb = new StringBuilder();
        for(Map.Entry<Character,Integer> en:lin.entrySet()){
            Character key = en.getKey();
            Integer value = en.getValue();
            sb.append(key).append("有").append(value).append("个,");
        }
        System.out.println(sb.substring(0,sb.length()-1));
    }
}

6 HashMap和Hashtable集合的区别【面试题】

  1. 相同点:
    (1)HashMap和Hashtable都是Java用于存储映射关系的集合,都是Map的实现类
    (2)底层都采用了哈希表存储数据。
    (3)两个类中的方法都相同
  2. 不同点:
    (1)版本不同,Hashtable是jdk1.0版本出现的,HashMap是jdk1.2版本出现的
    (2)线程安全性不同,Hashtable是线程安全的,HashMap是线程不安全的
    (3)HashMap集合操作元素的效率高,HashTable集合操作元素的效率低
    (4)Hashtable不能存储null键null值,如果存储,出现空指针异常
    HashMap可以存储null键null值

6.1 线程安全不安全类型小总结

  1. StringBuiler是线程不安全,使用效率高
    StringBuffer是线程安全,使用效率低
  2. HashMap线程不安全,使用效率高
    Hashtable线程安全,使用效率低
  3. ArrayList 线程不安全,使用效率高
    Vector 线程安全 ,使用效率低

7 Collections工具类

  1. 概述:本类是JDK提供的操作集合的工具类,类中定义了一些操作集合元素的方法
  2. 常用方法:
项目Value
binarySearch(List<? extends Comparable<? super T>> list, T key)通过二分查找法查找元素key在集合中的索引
frequency(Collection<?> c, Object o)获取集合中o元素出现的次数
max(Collection c)求出集合中的最大值
min(Collection c)求出集合中的最小值
reverse(List<?> list)反转集合中的元素顺序
shuffle(List<?> list)随机排列集合元素的顺序
sort(List<T> list)将集合中的元素进行升序排列
swap(List<?> list, int i, int j)交换集合中两个元素的位置
synchronizedList(List<T> list)将线程不安全的单列集合可以转换为安全的单列集合
synchronizedMap(Map<K,V> m)将线程不安全的双列集合转为安全的双列集合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值