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,保持元素的线性顺序,同时提供散列的快速访问。

      

  • 相关阅读:
    几种二叉可并堆(详细)
    几种二叉可并堆(详细)
    Winsock编程基础介绍 . 分类: VC++ 2013-09-14 17:30 512人阅读 评论(0) 收藏
    VS2005+WINDDK+Driver Studio 3.2个人总结 分类: VC++ 2013-09-14 17:26 593人阅读 评论(0) 收藏
    用DDK开发的9054驱动 . 分类: windows驱动程序WDM 2013-09-14 17:24 625人阅读 评论(0) 收藏
    arm-linux-gcc下载与安装 分类: arm-linux-Ubuntu 2013-09-11 14:12 698人阅读 评论(0) 收藏
    u盘安装ubuntu10.04 server.txt 分类: arm-linux-Ubuntu 2013-09-11 14:10 882人阅读 评论(1) 收藏
    Makefile的规则 分类: arm-linux-Ubuntu 2013-09-11 14:09 517人阅读 评论(0) 收藏
    学习了LINUX下用C语言遍历文件夹,一些心得 分类: arm-linux-Ubuntu 2013-09-11 14:09 885人阅读 评论(1) 收藏
    dm642的中断定时器 分类: DSP 2013-09-10 14:35 660人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/liaobudao/p/11228357.html
Copyright © 2011-2022 走看看