JAVA后端笔记04-集合框架-List-Map-Set-泛型

集合可以看作是一种容器,用来存储对象信息。

关于集合和数组的不同点:
数组的长度是固定的,如果想增加长度,只能创建新的数组。
集合的长度是可变的,数据理论可以无限添加,自动扩容。
数组元素的类型必须是同一种类型,比如 String[]  arr = ["a","b","c"];
集合元素可以是不同的类型   ArrayList<Object> arr = new ArrayList<Object>();

Java集合类主要由两个根接口Collection和Map
Collection:
    集合的顶层接口
    有三个子类
    list---------------- 列表是有序的,有下标的,可重复的
        ArrayList    
            ArrayList实现了长度可变的数组,在内存中分配连续的空间
            – 优点:遍历元素和随机访问元素的效率比较高
            – 缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低
        LinkedList
            LinkedList采用链表存储方式。
            – 优点:插入、删除元素时效率比较高
            – 缺点:遍历和随机访问元素效率低下
        Vector        Vector 类实现了一个动态数组。和 ArrayList 很相似  过时了
        
        Vector和ArrayList的联系和区别:
            – 实现原理相同,功能相同,都是长度可变的数组结构,很多时
            候可以互用
            – 两者的主要区别如下
            ▪ Vector是早期的JDK接口,ArrayList是替代Vector的新接口
            ▪ Vector线程安全,ArrayList重速度轻安全,线程非安全
            ▪ 长度需要增长时,Vector默认增长一倍,ArrayList增长50%
            (1.5+1)
    Set-----------------集合是无序的,但是要把LinkHashSet除外,没有下表,不可重复!
                        (存入和取出的顺序丌一定一致) 操作数据的方法不List类似,Set接口不存在get存在get()方法!
        HashSet:采用Hashtable哈希表存储结构
             优点:添加速度快,查询速度快,删除速度快
             缺点:无序
        LinkedHashSet
            采用哈希表存储结构,同时使用链表维护次序
            有序(添加顺序)
        TreeSet
            采用二叉树(红黑树)的存储结构
            优点:有序(排序后的升序)查询速度比List快
            缺点:查询速度没有HashSet快
    Queue    队列    队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
    
    Map:
        HashMap-------------------------
            Key无序 唯一(Set)
            Value无序 丌唯一(Collection)
        TreeMap-------------------------
            有序 速度没有hash快
        ConcurrentHashmap---------------
            并发相关的Map
            
        HashMap和Hashtable的联系和区别:
            – 实现原理相同,功能相同,底层都是哈希表结构,查询速度快,
            在很多情况下可以互用
            – 两者的主要区别如下
            ▪ Hashtable是早期的JDK提供的接口,HashMap是新版的
            JDK提供的接口
            ▪ Hashtable继承Dictionary类,HashMap实现Map接口
            ▪ Hashtable是线程安全,HashMap线程非安全
            ▪ Hashtable丌允许null值,HashMap允许null值
Iterator 接口:
    所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。
    ▪ Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
    ▪ Iterator接口定义了如下方法:
    boolean hasNext(); //判断是否有元素没有被遍历
    Object next(); //返回游标当前位置的元素并将游标移动到下一个位置
    void remove(); //删除游标左面的元素,在执行完next之后该
     //操作只能执行一次
Collections工具类
    Collections和Collection不同,前者是集合的操作类,后者是集合接口
    Collections提供的静态方法
    addAll():批量添加
    sort():排序
    binarySearch():二分查找
    fill():替换
    shuffle():随机排序
    reverse():逆序
泛型:
    泛型解决了数据类型操作丌统一产生的异常。
    使用泛型可以更好的去保护数据类型。 
    
    一个例子:
    List arrayList = new ArrayList();
        arrayList.add("abc");
        arrayList.add(100);

        for(int i = 0; i< arrayList.size();i++){
            String item = (String)arrayList.get(i);
            Log.d("泛型测试","item = " + item);
        }

    运行结果会崩溃,并且报:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    arrayList里面没有规定泛型,就可以在里面添加不同类型的元素!当再拿出来的时候,发现int类型以String类型拿出来的时候,报错了!
    
    如果我们在一开始就规定好了泛型例如:
        List<String> arrayList = new ArrayList<String>();
    那么在进行 arrayList.add(100); 的时候,程序在编译期间就会报错!
    泛型有三种使用方式,
    分别为:
    泛型类:
    泛型接口
    泛型方法
    还有泛型的上限 和 下限

等待以后补充..........

发布了13 篇原创文章 · 获赞 1 · 访问量 1496

猜你喜欢

转载自blog.csdn.net/gaoyang426/article/details/104977811
今日推荐