day18(Map,Collections)

1.Collections类
  • a.概述

    * 此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。
    
  • b.常用方法

    • addAll(Collection <? super T> c, T… elements)
      • 将所有指定元素添加到指定 collection 中。
      • List<Integer> list = new ArrayList<>();
        Collections.addAll(list,3,4,34,4);
    • binarySearch(List<? extends Comparable<? super T>> list, T key)
      • 使用二分搜索法搜索指定列表,以获得指定对象。
    • replaceAll(List<T> list, T oldVal, T newVal)
      • 使用另一个值替换列表中出现的所有某一指定值。
    • reverse(List<?> list)
      • 反转指定列表中元素的顺序。
    • shuffle(List<?> list)
      • 使用默认随机源对指定列表进行置换。
    • sort(List<T> list)
      • 根据元素的自然顺序 对指定列表按升序进行排序。
    • swap(List<T?> list, int i, int j)
      • 在指定列表的指定位置处交换元素。
public class Temp1 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        //添加元素
        Collections.addAll(list,3,4,34,4);
        System.out.println(list);
        //二分查找
        int index = Collections.binarySearch(list, 34);
        System.out.println(index);
        //替换
        Collections.replaceAll(list, 4, 100);
        System.out.println(list);
        //反转
        Collections.reverse(list);
        System.out.println(list);
        //随机置换
        Collections.shuffle(list);
        System.out.println(list);
        //排序
        Collections.sort(list);
        System.out.println(list);
        //交换
        Collections.swap(list, 0, 3);
        System.out.println(list);
    }
2.Map接口概述
    * 将键映射到值的对象
    * 一个映射不能包含重复的键
    * 每个键最多只能映射到一个值
    * 允许使用 null 值和 null 键
3.Map接口和Collection接口的不同
* Map是双列的,Collection是单列的
* Map的键唯一,Collection的子体系Set是唯一的
* Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
4.Map集合的功能概述
  • a:添加功能

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

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

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

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

    * int size():返回集合中的键值对的个数
    
public class Map_test01 {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("语文", 67);
        map.put("数学", 87);
        map.put("英语", 88);

        System.out.println(map);
        //V remove(Object key)根据键删除键值对元素,并把值返回
        Integer math = map.remove("数学");
        System.out.println(math);
        System.out.println(map);

        //containsKey(Object key)
        if(map.containsKey("语文")){
            map.put("语文", 80);
        }
        System.out.println(map.get("语文"));
        //获取集合中所有键的集合
        Set<String> keys = map.keySet();
        System.out.println(keys);

        //获取集合中所有值的集合
        Collection<Integer> collection = map.values();
        System.out.println(collection);
    }
}
5.Map集合的遍历
  • a.键找值思路:

    • 效率较低,需要两次遍历
    • 获取所有键的集合
    • 遍历键的集合,获取到每一个键
    • 根据键找值
  • b.键值对对象找键和值思路:

    • 效率较高,只需一次遍历
    • 获取所有键值对对象的集合
    • 遍历键值对对象的集合,获取到每一个键值对对象
    • 根据键值对对象找键和值
public class Bianli_1 {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("语文", 67);
        map.put("数学", 87);
        map.put("英语", 88);

        //第一种
        Set<String> set = map.keySet();
        for (String string : set) {
            System.out.println(string+":"+map.get(string));
        }

        //第二种
        System.out.println("-----------");
        Iterator<String> iterator = set.iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            System.out.println(key+":"+map.get(key));
        }

        //第三种
        System.out.println("----------");
        for(Map.Entry<String, Integer> entry : map.entrySet()){
            System.out.println(entry.getKey()+" "+entry.getValue());
        }
    }
}
6.HashMap集合键是自定义对象
7.LinkedHashMap概述和使用
    * 底层是链表实现的可以保证怎么存就怎么取
8.TreeMap集合键是自定义类型
9.统计字符串中每个字符出现的次数
public class Ti8 {
    //统计字符串中每个字符出现的次数
    public static void main(String[] args) {
        String str = "sdsdddfvcd";
        HashMap<Character, Integer> hs = new HashMap<>();
        char[] cs = str.toCharArray();
        for (char c : cs) {
            if (!hs.containsKey(c)) {
                hs.put(c, 1);
            }else{
                hs.put(c,hs.get(c)+1);
            }
        }
        for(Character character : hs.keySet()){
            System.out.println("字符"+character+"出现了"+hs.get(character)+"次");
        }
    }
}

10.HashMap和Hashtable的区别

  • 面试题

    • HashMap和Hashtable的区别
      • Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高
      • Hashtable不可以存储null键和null值,HashMap可以存储null键和null值

11.练习

  • a.模拟斗地主洗牌和发牌,牌没有排序
  • b.模拟斗地主洗牌和发牌并对牌进行排序的代码实现

12.泛型固定下边界

public class Fanxing {
    public static void main(String[] args) {
        List<?> list = null;
        list = new ArrayList<String>();
        list = new ArrayList<Integer>();
        /*
         * ?等号右边的泛型不确定的时候使用,但添加,删除元素等会报错
         * list.add(34);
         */  
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值