java 集合框架的学习笔记

集合框架

  1. 什么是集合

    • 对象得容器,定义了对多个对象进行操作的常用方法。可以实现数组的功能。

    • 和数组的区别:

      • 数组长度固定,集合长度不固定。
      • 数组可以存储基本类型和引用类型。集合只能存储引用类型。
    • 位置:Java.util.*;

  2. Collection接口(代表一组对象,称为“集合”)

    • List(有序,有下标,元素可以重复)
      • ArrayList:
        • 数组结构实现,查询快,增删慢;
        • JDK1.2版本,运行效率快,线程不安全。
      • LinkList
        • 链表实现结构,增删快,查询慢。
      • Vector
        • 数组结构实现,查询快,增删慢;
        • JDK1.0版本,运行效率慢,线程安全。
    • Set(无序,没下标,不可重复)
      • HashSet
        • 基于hashCode计算元素存放位置。
        • 当存入元素的hash码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入。
        • 自动生成的hashcode会用到一个常数31;
          1. 31是质数,可以减少散列冲突
          2. 31可以提高效率:i*31=(i<<<5)-i
      • SortedSet
        • TreeSet:
          • 基于排序顺序实现元素不重复。
          • 实现了sortedSet接口,对集合元素自动排序。
          • 元素对象的类型必须实现Compatable接口,指定排序规则。
          • 通过CompareTo方法确定是否为重复元素
  3. 泛型:

    • java 泛型是JDK1,5中引入的一个新特征,其本质是参数化类型,把类型作为参数进行传递。
    • 常见的形式有泛型类、泛型接口、泛型方法。
    • 语法:
      • <T,......>T称为类型占位符,表示一种引用类型。
    • 好处:
      • (1)提高代码的重用性
      • (2)防止类型转换异常,提高代码的安全性。
  4. 泛型集合:

    • 概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致。

    • 特点:

      • 编译时即可检查,而非运行时抛出异常。
      • 访问时,不必类型转换(拆箱)。
      • 不同泛型之间引用不能相互赋值,泛型不存在多态

      不一样的:下面这段代码,教程上会报错,我1.8的就不会报错

       ArrayList arrayList = new ArrayList<>();
              arrayList.add("ahui");
              arrayList.add("angela");
              arrayList.add("ahuang");
              arrayList.add(123);
      
              for (Object o : arrayList) {
                  System.out.println(o);
              }
      //教程报错:ClassCastException
      
  5. map体系集合:

    • Map(Interface):①用于存储任意键值对(Key-Value)②键:无序,无下标,不允许重复(唯一)③值:无序,无下标、允许重复
      • HashMap(Class)【重点】
        • 遍历的方法:
          • map.keySet()获取key数组,然后用key遍历去取;
          • map.entrySet()map集合,然后取出来,速度快,一次获取。
        • 总结:
          • HashMap刚创建时,table是null,为了节省空间,当添加第一个元素时,table容量调整为16
          • 当元素大于阙值(16*0.75=12)时,会进行扩容,扩容后大小时原来的两倍,目的时减少调整元素的个数。
          • jdk1.8:当每个链表长度大于八并且数组元素个数大于等于64时,会调整为红黑树,目的时提高执行效率。
          • jdk1.8 长度小于8时是链表
          • jdk1.8以前,链表是头插入,jdk1.8以后尾插入
          • HashSet和HashMap的关系
            • HashSet的实现时用的HashMap的key.
      • Hashtable:
        • JDK1.0版本,线程安全,运行效率慢,不允许null作为key或者value
      • Properties:
        • Hashtable的子类,要求key和value都是String。通常用于配置文件的读取
      • SortedMap(Interface)
        • TreeMap(Class):实现了SortedMap接口,可以对key进行自动排序。
posted @ 2022-01-13 22:31  园子里的全栈攻城狮  阅读(17)  评论(0编辑  收藏  举报