zoukankan      html  css  js  c++  java
  • 集合框架

    集合框架

    一 集合概念:

    对象的容器,实现了对对象的常用操作,类似数组功能。

    二:和数组的区别

    • 数组定义时需要确定长度,但集合不需要。
    • 数组可以存储基本类型和引用类型,而集合只能存储引用类型(基本类型可以实现装箱进行存储)。
    collection集合体系图

    collection集合体系图

    collection方法的使用

      Collection ct=new ArrayList();    //注意:接口不能实例化,只能调用子类的实现类
       ct,add("苹果");                   //向ct集合中添加元素。
       ct.add("香蕉");
      ct.remove("香蕉");                 //删除该元素
      ct.clear();                        //删除所有元素
    //  使用增强for循环遍历集合元素     
        for(Object object:ct){     //注意点:因为该集合没有下标,不能使用for循环遍历
            system.out.printlf(object);
        }
    //使用迭代器遍历集合元素
     Iterator it =ct.iterator();
    while(it.hasnext()){      //hasnext()判断还有没有集合元素了
        String s=(String)it.next();    //next()将集合元素取出来
         system.out.printlf(s);
        it.remove();        //注意点:在使用iterator迭代器时循环时,不能使用collection集合remove方法删除,只能使用iterator自身的remover方法。
    }
    ct.contains("苹果");       //判断集合中是否含有该元素
    ct.isEmpty();            //判断集合是否为空
    

    List集合

    特点:有序、有下标、元素可重复。

    List实现类

    • ArrayList类:
      • 数组结构实现,查询快,增删慢。
      • 运行效率快,线程不安全。
    • Vector类:
      • 数组结构实现,查询快,增删慢。
      • 运行效率慢,线程安全。
    • LinkedList类:
      • 链表结构实现,增删快,查询慢。

    泛型

    其本质时参数化类型,把类型作为参数传递。

    • 好处: 1.提高代码的重用性

      ​ 2.防止类型转换异常,提高代码的安全性。

    泛型集合

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

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

    Set集合

    特点:无序、无效标、集合元素不能重复。

    Set实现类:HashSet: 存储结构 哈希表(数组+链表+红黑树)

    • 基于HashCode计算元素存放的位置。
    • 当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入。

    TreeSet: 存储结构:红黑树

    1. 基于排列顺序实现元素不重复(红黑树)
    2. 实现了SortedSet接口,对集合元素自动排序。
    3. 元素对象的类型必须实现Comparable接口,指定排列规则
    4. 通过CompareTo方法确定是否为重复元素。

    Map集合

    Map集合体系图

    特点:

    • 用于存储任意键值对(Key-Value)
    • 键:无序、无下标、不允许重复(唯一)
    • 值:无序、无下标、允许重复
    • 遍历集合元素通常使用keySet()和entrySet()方法实现;

    HashMap实现类

    • 线程不安全,运行效率快;允许用null作为key 或者value;
    • 存储结构为哈希表(数组+链表+红黑树)
    • HashMap为什么是等链表长度为8才转红黑树
      • 因为通常情况下,链表长度很难达到8,但是特殊情况下链表长度为8,哈希表容量又很大,造成链表性能很差的时候,只能采用红黑树提高性能
    • HashMap容量扩容是为什么是2的幂数
      • 是因为容量是2的n次幂,可以使得添加的元素均匀分布在HashMap中的数组上,减少hash碰撞,避免形成链表的结构,使得查询效率降低!
    • HashMap如何解决hash碰撞
      • 定义一个负载因子,默认的为0.75,当容量超出容量得白分之75,HashMap会进行自动扩容,以解决HashMap碰撞。

    Hashtable:

    • 线程安全,运行效率慢;不允许用null作为key 或者value;

    Properties:

    • Hashtable的子类,要求key 和value都是String类型的。通常用于配置文件的读取。
    • 特点:
      • 1存储属性名和属性值
      • 2属性名和属性值都是字符串类型
      • 3没有泛型
      • 4和流有关

    TreeMap实现类

    • 元素对象的类型必须实现Comparable接口,指定排列规则
    • 实现了SortedMap接口(Map的子接口),可以对key进行自动排序。
  • 相关阅读:
    form表单提交中文乱码(前台中文到JAVA后台乱码)问题及解决
    JSON工具类库: alibaba/fastjson 使用记录
    前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 "
    AJAX与后台交互传参的两种方式
    小米平板充不上电解决(非硬件问题+系统升级原因)
    对于异常的理解
    solr如何进行搜索实战,关键字全库搜索
    solr5.5.4 添加mysql数据,实现同步更新
    solr5.5.4 tomcat8部署
    log4j通过配置文件配置即,即可完成系统报错想向指定邮箱发送提醒消息,网上的很多方法都又问题
  • 原文地址:https://www.cnblogs.com/xiaopanjava/p/13783408.html
Copyright © 2011-2022 走看看