泛型 map集合 hashmap

1.Generic泛型
    <> 泛型限定 规定集合中数据的存储类型是什么
    注意事项:
        1.创建对象时 前后的泛型要求保持一致 或者后面的可以省略不写(jdk1.7新特性)
        2.泛型<>必须是引用数据类型
    泛型高级通配符
        <? extends 类名>  ---> 类 以及其子类
        <? super 类名>      ---> 类 以及其父类
        <?> 任意类型 如果没有明确 那么就都是Object
2.Map集合
    Collection 
        List
        Set
            HashSet
                LinkedHashSet
            TreeSet
    Map
        HashMap
            LinkedHashMap
        TreeMap
    public interface Map<K,V>将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 
        键值对
        Collection 是单列的 (单身狗) 数据结构 针对的是元素
        Map 是双列的 (夫妻档 有结婚证作为联系)
        特点:
            1.Map的键是唯一的 所有的数据结构针对的都是键 key
            2.根据key来排重 也就是说 相同键的元素 在Map集合中只存储一份
                排重(存储顺序  和 底层存储顺序不一致)
                key 是无序的  唯一的
                value是无序的 不唯一的
            3.键和值 要求都是引用数据类型
            
        Map集合的常用功能:
            增:
                V put(key,value) 以键值对的形式进行存储
                    put方法 会先去集合中找 是否有指定的键对应的值 如果有就将它返回 没有返回null
            删:
                void clear() 清空
                V remove(key) 根据键 删除键值对
            判断:
                boolean containsKey(key) 判断是否包含指定的键
                boolean containsValue(value) 判断是否包含指定的值
                boolean isEmpty() 判断集合是否为空
            查:
                Set<Map.Entry> entrySet()
                Set<k> keySet()
                V get(key) 根据键获取值
                Collection<V> values() 获取集合中的所有值的集合
            长度:
                int size() 返回集合中键值对的个数
        Map接口的常用子类:
            和Set很像
                其实 Set集合的底层 就是用了Map集合 只用了 key
        HashTable
            jdk1.0
            底层是哈希表 
            线程安全 效率低
            不可以存储null键 null 值
        HashMap
            jdk1.2
            底层是哈希表(哈希算法)
            线程不安全 效率高
            可以存储null键 null值
        存储自定义数据类型 需要重写 hashCode() 和 equals()方法
            LinkedHashMap
                底层是双向链表 有序(存储顺序 和 底层存储顺序一致)
        TreeMap
            底层是二叉树
            排序
            数据结构针对的都是键

            存储自定义数据类型 必须具备比较性
                类 实现 Comparable接口
                容器 添加 Comparator比较器
3.Collections工具类
    此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。
    常用方法:
        void sort(List) 排序
        int binarySearch(List,key)二分法查找指定元素所在位置
        T max(Collection) 最大值
        void reverse(List) 反转
        void shuffle(List) 随机打乱顺序
        Comparator reverseOrder() 反转自然排序
        void swap(List,int i,int j)将集合中指定位置的元素进行交换

集合总结
    Collection(单列)
        List (有序 有索引 可重复)
            ArrayList 数组 线程不安全 效率高 查找和修改快 增删慢
            LinkedList 链表 线程不安全 效率高 查找和修改慢 增删快
            Vector 数组 线程安全 效率低 枚举遍历

            如果 查找和修改多 ArrayList
            如果 增删多 LinkedList
            如果都多 ArrayList

            ListIterator 是List集合特有的迭代方式
                add() set()....
        Set (无序 无索引 不可重复)
            HashSet 哈希算法
                存储自定义数据类型 重写 hashCode()和equals()方法
                LinkedHashSet
                    链表 有序
            TreeSet 二叉树 可排序
                Comparator / Comparable
                优先使用Comparator
            HashSet用的多
            面试的时候 TreeSet问的比较多
        Collections工具类
        Iterator迭代器 
    Map(双列 数据结构都是针对键 键相同值覆盖 无序)
        HashTable 哈希表 不允许存储null键 null值
            线程安全 效率低
        HashMap 哈希算法 允许存储null键 null值
            线程不安全 效率高
            LinkedHashMap
                链表 有序
        TreeMap 二叉树 可排序
        Map没有迭代器 需要使用 keySet() entrySet()方法 获取Set 然后再操作
4.IO流---字符流

    什么是IO流
        Input Output
        IO流 是用来处理设备之间的数据传输
        java对于数据的操作都是通过流的方式进行的
        所有java用于操作流的对象 都在IO包中
    IO流的种类划分
        按照流向分
            输入流
                InputStream
                Reader
            输出流
                OutputStream
                Writer
        按照处理数据的不同分:
            字节流
                InputStream
                OutputStream
            字符流
                Reader
                Writer
    字符流
        字符流就是可以直接读写字符的IO流
        字符流读取字符
            先读取字节数据 然后 转为字符
            如果要写出 再将字符 转成字节写出
        Writer 写出 内存-->硬盘的过程
            是抽象类 使用FileWriter来创建该类对象

            write(String) 方法的重载 可以接收字符串 字符数组 整数
                向流中写入数据
            flush()方法 将流中的数据 刷新到指定的目标中
            close()方法 关闭流 同时会先刷新一次

        创建一个 FileWriter对象
        /*
         * 不仅在堆内存中创建该类对象 还会在电脑的硬盘上创建文件
         * 其实 这一步 就是在明确 数据要存放的目的地
         * 如果该目录下 没有同名文件 就创建
         * 如果该目录下 有同名文件 就覆盖
         * */
        Reader 读入 硬盘-->内存的过程
            int read() 读取单个字符。 
            int read(char[] cbuf) 将字符读入数组。 
            void close() 关闭该流并释放与之关联的所有资源。

猜你喜欢

转载自blog.csdn.net/weixin_42738506/article/details/81349938