zoukankan      html  css  js  c++  java
  • 持有对象

      Java是面向对象的编程语言,所有的实例都被称为对象。持有对象指的是获取对象并存放,他有很多种方式,比如:Student stu = new Student();这里创建了一个Student的对象并把它赋值给了变量stu,那么就称stu持有Student对象。

      通常,程序总是运行时根据知道的某些条件去创建对象,在此之前是不知道创建对象的类型和数量的。那怎么解决这个问题呢?要解决这个问题就不能用之前的例子来创建命名的引用持有,可以使用Java提供的容器来解决这个问题。容器中数组是不能解决这个问题的,因为数组长度是固定的,运行时程序是不知道具体需要创建多少对象。

      Java中有专门的容器类来处理这个问题,容器类提供了完善的方法来保存对象,你可以使用这些容器类来解决数量和存储类型的问题。容器类主要分为Collection和Map的子类。

      一、Collection,代表一组独立元素的序列,这些元素都服从一条或多条规则。它下面的主要子集有List、Set、Queue;

      二、Map是一组成对的“键值对”对象,使用键来查找值,Map也被称为“关联数组”,使用过PHP的会有深刻感受。

      Collection:

      1、List的实现类可以将元素维护在特定的序列中,能够对元素进行插入(set())、增加(add())、遍历(iterator()、foreach()、listIterator())、查找(get()、indexOf()、contains())、删除等操作;具体实现:

        --ArrayList,它的底层是以数组实现,但是它没有数组的长度限制,它的长度是通过加载因子来不断扩容的;由于是数组实现,它随机访问的速度对比LinkedList来说要快,插入和删除慢(元素的多少决定了变更元素的速度)。

        --LinkedList,它是以双向链表实现,在插入和删除元素的代价较低(变更元素的花费是固定的,与元素的多少无关);提供了顺序的优化访问元素;在随机访问方面比ArrayList慢。如果频繁对List集合进行插入和删除建议使用LinkedList,因为它的插入的花费是固定的。

        --Stack,“栈”通常是指“后进先出”,它分为栈底和栈顶,它的入口也是出口,最先进去的数据总是在栈底,最后进去的总是在栈顶;它是继承Vector来实现的,所以它是线程安全的。

      2、Set,保证集合元素的唯一性,这种唯一性在开发中需要自己去定义equals()和hashCode()方法,否则使用Object对象的默认equals()和hashCode()实现。Set的具体实现大多都是利用Map的实现类来进行存储实现的。具体实现类:

        --HashSet,专门对快速查找进行了优化,实际是HashMap对这方面进行了优化,HashSet之所以能实现无重复对象是因为它把存入的对象用Map的Key来进行存储,它能保证数据的唯一性,但不能保证数据的顺序,因为是散列实现。

        --TreeMap,是通过TreeMap来进行存储的,它能够保证元素的排序,需要开发者实现比较器(Comparable,Comparator)。

        --LinkedHashSet,能够保持元素的线性顺序,同时提供散列的快速访问。

      3、Queue,“队列”通常是“先进先出”,队列一般不能插入null,因为poll()的时候会弹出列头的数据,如果没有就返回null,这样会导致冲突。

        --LinkedList,实现了List的同时也实现了Queue接口,它可以实现“先进先出”的队列。

        --PriorityQueue,优先级队列,它会把添加的数据按照优先级进行排序,默认是自然排序,可以使用比较器(Comparator)来实现自定义优先级。

      Map:

      1、HashMap,通过散列的机制,能够快速查找,对于元素的顺序是无序的。

      2、TreeMap,保持key处于排序状态,访问速度不如HashMap。

      3、LinkedHashMap,保持元素的线性顺序,同时提供散列的快速访问。

      

  • 相关阅读:
    vue调用嵌套iframe的方法
    Kafaka 集群搭建(Windows环境)
    EF Core 延迟加载
    OLTP 和 OLAP
    数据库调优(二)Inner Join Merge Join Hash Match
    数据库性能调优(一)
    Identity Server4 数据迁移、持久化
    mysql.data.entityframeworkcore 已弃用
    Failed to start LSB: Bring up/down networking
    线程死锁与同步
  • 原文地址:https://www.cnblogs.com/liaobudao/p/11228357.html
Copyright © 2011-2022 走看看