A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 芷弦 中级黑马   /  2018-11-15 09:39  /  930 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

集合和数组的区别:
        集合;长度可变,只能存储引用数据类型
        数组:长度固定,既可以存储基本数据类型,也可以存储引用数据类型

集合的体系结构:集合类有很多,不断地抽取共性,则形成了体系结构
        只要是Collection的实现类,则一定拥有Collection的方法
        Collection
            --List:有序(存和取的顺序),有索引,允许重复
                常用方法:
                        c.add("ad");//添加指定元素,返回是否添加成功
                        c.clear();//删除集合中的所有元素
                        c.contains("ad");//判断集合中是否包含指定元素
                        c.isEmpty();//判断集合是否为空(元素的个数是否为0)
                        c.remove("ad");//删除指定元素第一个出现的那个,返回是否删除功能(当元素不存在则删除失败)
                        c.size();//返回元素个数
                        c.toArray();//将集合转为数组
                --ArrayList
                --LinkedList
                --Vector
            --Set:无序(不保证存和取的顺序一致),无索引,不允许重复
                --HashSet
                    --LinkedHashSet
                --TreeSet
        Iterator:迭代器借口:
                boolean hasNext() 判断是否还有元素可以进行迭代
                E next() 取出指定元素
                工作原理:
                        1.默认迭代器对象会指向集合的第一个元素,
                        2.可以先通过hasNext判断是否有指向位置的元素,如果有元素,则返回true
                        3.如果有元素,则可以通过next方法取出指定位置的元素
                注意事项:使用迭代器时,不能在使用过程中进行集合元素的添加或者删除

                解决并发修改异常:(略)
                        1.不要使用迭代器来遍历集合,使用转数组的方式
                        2.在需要修改集合的时候,不使用集合,用迭代器操作
                        ListIterator<String> it = c.listIterator//只有list中才能使用

增强for循环(foreach):
        格式:
            for(元素类型 变量名 :数组/集合) {}
        工作原理:
                每次都会将集合的元素赋值个冒号左边的变量,我们就可以通过操作变量从而操作集合中的元素
泛型
        使用泛型的好处:
                1.限定了集合中存储的数据类型,减少因为类型转换带来的一些问题
                2.简化代码的书写,可以不用向下转型
        定义泛型类:
                在定义类的时候在类名后声明泛型,当我们创建
                class Box<E>{}
        定义泛型接口:
                1.在定义实现类的时候,直接确定借口中的泛型具体类型
                        interface Box<E>{        }
                        class BoxImpl implements Box<String> {        }
                2.在定义实现类的时候不确定泛型的类型,但是在创建实现类对象的时候再去确定其具体类型
                        interface Box<E> {        }
                        class BoxImpl<E> implemrnts Box<E> {        }
                        BoxImpl<String> b = new BoxImpl<String>()
                泛型的边界:
                        1.?是一个通配符,如果泛型定义的类型是?代表可以传递任意类型的数据
                                public static void method(ArrayList<?> list) {        }
                        2.? extents Person 代表可以传递Person类型,以及其子类型
                                public static void method(ArrayList<? extents Person> list) {        }
                        3.? super Person 代表可以传递Person类型,以及其父类型
                                public static void method(ArrayList<? super Person> list) {        }

数据结构:
        栈:先进后出
           特点:
                1.只能在一端进行元素的添加和删除
                2.先进后出(*
                        入口和出口在同一侧,先进去的元素后出来
        队列:
           特点:
                1.先进先出(*)       
                2.入口和出口分别在两端
        数组:
           特点:
                1.增删慢:长度不可变
                2.查询快:元素有对应的索引,是一片连续的内存空间
        链表结构:
                每个元素都是一个对象,对象中包含的元素数据,指针每个元素之间,通过指针相连
           单向链表特点:
                1.增删快:增删元素不会改变原有内容
                2.查询慢:查询只能依次查询
           双向链表:
                相比单向链表:查询稍微快一点
        红黑树:
           特点:
                查询速度快
           名词解释:
                二叉树:分支不超过两个
                查找树/排序树:是一个有序的二叉树(左子树小于节点,右子树大于节点)左中右,则是从小到大的顺序
                平衡树:左右子树高度差不超过1
                红黑树:趋近于平衡树,查询速度非常快
        java.uitl.List
                概述:
                    是Collection下的一个子接口,在list接口下的集合都有以下特点
                        1.有序
                        2.右索引
                        3.允许重复
                List中的特有功能(和索引相关的增删改查的功能)
                        add(int index,E element):在指定索引位置添加元素
                        remove(int index):删除指定位置的元素,吧被删除的元素返回
                        set(int index, E element):修改指定索引位置的元素为指定值,把被修改的元素返回
                        get(int index):获取指定索引位置的元素

                Arraylist:底层实现的数组
                LinkedList:
                        1.底层是一个链表结构:查询慢,增删快
                        2.里边包含了大量操作首尾元素的方法
                        注意:使用LinkedList集合特有的方法,不能使用多态
                        addFirst(E e):将制定元素插入此列表的开头
                        addLast(E e):将制定元素添加到此列表的结尾
                        push(E e):将元素推入此列表所表示的堆栈

                        getFirst():返回此列表的第一元素
                        getLast():返回此列表的最后一个元素

                        removeFirst():移除并返回此列表的第一元素
                        removeLast():移除并返回此列表的最后一个元素
                        pop():从此列表所表示的堆栈处弹出一个元素
                        isEmpty():如果列表不包含元素,则返回true
                                可以模拟栈和队列
                Vector:
                        和ArrayList实现功能是一致的(底层也是数组的实现)
                        唯一的区别:
                                ArrayList不同步的(效率高,安全性低)
                                Vector

        Set接口的特点:
                1.不允许存储重复的元素
                2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
               
        HashSet的特点:
                底层是hash表的实现,查询的效率非常高
                1.不允许存储重复的元素
                2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
                3.是一个无序的集合,存储元素和取出元素的顺序有可能不一致
                4.可以使用迭代器和增强for循环遍历
        哈希值:
                默认情况:根据对象的物理地址算出索引位置
        HashSet的存储原理:
                通过hashCode方法确定索引位置
                再通过equals方法去除重复元素
                总结:
                     存储元素的操作:
                        1.先获取对象的hash值去存储元素
                                hash值不一样,直接存储
                                hash值一样
                                   则比较equals的返回值
                                        如果是true则认为元素重复
                                        如果false,则认为元素不重复,则添加元素
                当我们用HashSet存储自定义对象的时候,如果想保证元素的唯一性,则需要重写hashCode和equals方法
                        alt + insert
        LinkedHashSet:本质就是一个有序的HashSet:hash表+链表
                        hash表用于存储元素
                        链表用于记录元素存储的顺序,当我们获取元素的时候,则会通过链表记录的顺序去获取元素
        可变参数:
           一种特殊的参数类型,可以接受任意多个同种数据类型的数据:0个,1个···此类型的数组

                格式:
                        数据类型...参数名
                原理:
                        将传毒的任意多个元素,封装到一个数组中,最后再传递给可变参数的变量
        1.Comparator 比较器对象,一个额外的比较规则
       
        格式
        Collections.sort(arr, new Comparator<JiHeLei>() {
            @Override
            public int compare(JiHeLei o1, JiHeLei o2) {
                return o1.getAge()- o2.getAge();
            }
        });
        2.Comparable 让对象所在的类去实现,实现后,则可以使用sort方法实现对元素的排序
                在调用Collections.sort方法的时候,除了传递被排序的集合,还传递一个比较器实现类对象


去重复的原理:
        1.首先通过元素hashCode方法获取哈希值,计算出元素在哈希表中的位置
        2.如果对应位置已经有元素了,通过equals比较元素的内容
               
        HashSet存储自定义对象,元素所在的类必须重写hashCode和equals方法


java.utli.Map(k,v)

Map集合
        特点:
                1. 每个元素有键值对组成
                2. key不可重复,value可以重复
                   3. 可以通过key找到对应的值value
        Map的实现类介绍

                HashMap:底层是哈希表的实现(HashMap中的键其实就是HashSet)
                   LinkedHashMap  就是一个有序的HashMap
                   put方法添加元素,如果键不存在,直接添加,put方法返回null


                Hashtable
                        Properties

        比较:
           Hashtable是同步的,Hashtable不允许null键和null值
           HashMap是不同步的,HashMap允许null键和null值,但是null键只能出现一次

        Map的常用方法/功能:
                V put(K k,V v)添加元素,如果键已经存在则用新值替换旧值,并返回旧值
                V remove(K k)按照给定的删除整个键值对,并且返回被删除的值
                V get(Object key)获取指定键对应的值(通过建获取值)
                boolean containsKey(Object key)判断指定的键是否存在
                boolean containsValue(Object value)判断指定的值是否存在

        Map的常用遍历方法/功能:
                Set<K> keySet() 获取包含所有键的Set集合  其实HashMap中的键就相当于一个HashSet (键找值的方式遍历Map集合)
                        Set<String> keys = map.keySet();
                Set<Map.Entry<K,V>> entrySet() 获取所有包含键值对元素(Entry)的Set集合
                        Set<Map.Entry<String,String>> set = map.entrySet();
        用HashMap存储自定义对象
                由于HashMap中的键相当于一个HashSet,需要重写equls和HashCode方法,保证键唯一

        使用HashSet存储元素的时候,底层是把元素存到Map中的键里面

JDK9中的新特性:添加元素到集合的of方法:
        在List,Map,Set接口中定义了一些重载的静态方法of可以实现将多个元素添加到集合中。
        注意事项:
                1.只能使用接口调用这些静态方法,实现类去调用则不可以
                2.使用of方法添加的元素不可被改变


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马