JAVA集合只能存放引用类型的的数据,不能存放基本数据类型,int 可以用 Integer代替。

一、集合接口
  1、  Iterable<E> 实现这个接口允许对象成为 "foreach" 语句的目标。
  2、  Collection<E> 接口扩展了Iterable 接口。该接口是Collection 层次结构中的根接口。
         集合类的基本接口 是Collection 接口,该接口有两个基本方法 :   add (向集合添加元素) 和 iterator ( 返回一个实现了Iterator 接口的 对象)。
         还有很多有用的方法,如size、isEmpty、contains 等等。而为了能够让实现者更容易地实现这个接口,java类库提供了一个类 AbstractCollection。它将基础方法size和iterator抽象化了,但是在此提供了例行方法。
  3、  Iterator<E> 接口。对 collection 进行迭代的迭代器。替代了 Enumeration接口。包含三个方法:
    next 、
    hasNext 调用next方法前应该先执行hasNext方法判断是否还有下一个元素
    remove 删除上次调用next方法时返回的元素。

二、具体的集合
以上以Map结尾的实现了Map接口,其它全部实现了Collection接口。
★ArrayList  数组列表 实现了List接口
  另一个动态数组类 Vector类 ,此类的所有方法是同步的,而ArrayList中的方法不是同步的。当不需要同步时使用ArrayList,以节省资源。
数组和数组列表从中间位置删除一个元素要付出很大代价,原因是数组中处于被删除元素之后的所有元素都要向数组的前端移动。插入一个元素也是如此。下边的链表解决了这个问题。 
★ LinkedList  链表   实现了List接口
  java中所有链表实际上都是双向链接的,即每个结点还存放着指向前驱结点的引用。这样从链表删除一个元素时只需要对被删除元素附近的结点更新一下即可。

   链表与泛型一个重要区别。链表是有序集合,每个对象的位置十分重要。
   链表不支持快速地随机访问。如果要查看链表中第n个元素,必须从头开始,越过n-1个元素。因此,当需要采用整数索引访问元素时,通常不选用链表。尽管如此,LinkedList类还是提供了一个get方法,用来获取第n个元素,效率当然不高。
★散列集 (HashSet) 
   散列表可以快速地查找所需要的对象,散列表为每个对象计算一个整数,称为散列码。
  在java中散列表用链表数组实现。
   散列表可以用于实现几个重要的数据结构。其中最简单的是set类型。set类型是没有重复元素的元素集合。(保证无重复:当添加元素时如果此 set 没有包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则向该 set 中添加指定的元素 e。如果此 set 已经包含该元素,则该调用不改变此 set 并返回 false。结合构造方法上的限制,这就可以确保 set 永远不包含重复的元素。)
  java集合类库提供了一个HashSet类,实现set接口,实现了基于散列表的集。当不关心集合中元素的顺序时才应该使用HashSet。
★ 树集 (TreeSet)
 TreeSet类与散列集十分类似,不过,树集是一个有序集合。排序是用树结构完成的。
  每次添加元素时,都被放置在正确的位置上。因此,添加到树中比添加到散列表中慢。
   关于对象的比较 传递Comparator对象给TreeSet 构造器。
   与散列集比较,当不需要排序时用散列集,需要时用树集,以节省开销。
★ 队列与双端队列
  队列可以让人们有效地在尾部添加一个元素,在头部删除一个元素。
  双端队列即两个端头,可以有效地在头部和尾部同时添加或删除元素。不支持在中间添加元素。
   Deque接口,由ArrayDeque和LinkedList类实现,这两个类都提供了双端队列。而且必要时可以增加队列的长度。
  优先级队列(PriotiryQueue)
  优先级队列中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。也就是说无论何时调用remove方法,总会获得优先级队列中最小的元素。 优先级队列使用数据结构为堆(heap)。堆是一个可以自我调整的二叉树,对树执行添加和删除操作,可以让最小的元素移动到根,而不必花费时间对元素进行排序。d而迭代并不是按照元素的排列顺序访问的。
使用优先级队列的典型示例是任务调度。
★ 映射表
 映射表存放键/值对。
 映射表数据结构实现通过某些键查找与之对应的元素的需求。
 Java类库中两个通用的实现:HashMap和TreeMap。这两个类实现了Map接口。与集一样,如果不需要排序,就选择散列HashMap。
 集合框架没有将映射表本身视为一个集合,而是提供了映射表的视图,这是一组实现了Collection接口对象,或者它的子接口的视图。
这三个视图为:键集(keySet)、值集合(values)和键/值对集(entrySet)。
★ 专用集与映射表集
    1 弱散列映射集。 负责从长期存活的映射表中删除无用的值。
        WeakHashMap 类
    2 链接散列集和链接映射表。用来记住插入元素项的顺序。
    LinkedHashSet类和 LinkedHashMap类
   链接散列映射表用访问顺序而不是插入顺序对映射表条目进行迭代。访问顺序对实现高速缓存的“最近最少使用"原则十分重要。
    3 枚举集和映射表
   EnumSet是一个枚举类型元素集的高效实现。   可以使用Set接口的常用方法修改EnumSet。
EnumMap是一个键类型为枚举类型的映射表。它可以直接且高效地用一个值数组实现。
   4 标识散列映射表
   IdentityHashMap。不同的键对象,即使内容相同,也被视为不同的对象。这个特性可以用来跟踪每个对象的遍历状况。
★ 集合框架
集合有两个基本的接口:Collection 和 Map。
List接口是一个有序集合。
RandomAccess接口。没有任何方法,但可以用来检测一个特定的集合是否支持高效的随机访问。
ListIterator接口定义了一个方法,用于将一个元素添加到迭代器所处位置的前面。
Set接口与Collection接口是一样的,只是其方法的行为有着更严谨的定义。(Set拒绝添加重复元素)。
SortedSet和SortedMap接口暴露了用于排序的比较器对象,并且定义的方法可以获得集合的子集视图。
最后,Java SE 6 引入了接口NavigableSet和NavigableMap,其中包含了几个用于在有序集和映射表中查找和遍历的方法。TreeSet和TreeMap类实现了这几个接口。

★ 遗留的集合
  1 Hashtable类 
   与HashMap作用一样。
  2 枚举 
   Enumeration接口对元素序列进行遍历。有两个方法hasMoreElements和nextElement 类似于Iterator接口的hasNext方法和next方法。
  3 属性映射表
  一个类型非常特殊的映射表结构。3个特性:键与值都是字符串;表可以保存到一个文件中,也可以从文件中加载;使用一个默认的辅助表。
   4 栈
   Stack类。Stack类扩展为Vector类
   5 位集
     BitSet类

我的Java之旅 第五课 JAVA 语言语法 集合的更多相关文章

  1. 我的Java之旅 第六课 JAVA WEB 请求与响应

    一.有关URL编码    1.在URL的规范中定义了一些保留字符,如::  /  ?  & =  @  % 等,在URI中有它的作用.如果要在URI中包含这些字符,必须转码,即%字符后跟十六进 ...

  2. 我的Java之旅 第四课 JAVA 语言语法 基础

    1  整型           int num = 1_000_000; //从java 7开始支持的语法 ,只是让人更易读,java编绎器会去除   2  字符串        一定不能使用==运算 ...

  3. 我的Java之旅 第七课 JAVA WEB 会话管理

    1.隐藏域       隐藏域其实不是Servlet/JSP的会话管理机制的内容,但它能实现简单的页面状态记录的效果. 2.Cookie    Cookie类    setMaxAge() 设置有效期 ...

  4. JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块

    JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...

  5. [Java并发编程(五)] Java volatile 的实现原理

    [Java并发编程(五)] Java volatile 的实现原理 简介 在多线程并发编程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 sync ...

  6. JAVA中反射机制五(java.lang.reflect包)

    一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...

  7. Java入门篇(五)——Java的字符串/String类

    前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...

  8. Java并发编程(五)-- Java内存模型补充

    前面我们已经介绍了:当对象和变量存储到计算机的各个内存区域时,必然会遇到的两个问题及解决方法 共享对象的可见性-- 解决方法:使用java volatile关键字 共享对象的竞争现象 -- 解决方法: ...

  9. 我的Java之旅 第三课 从Applet到JSP

    一.Applet   Applet是一种特殊的Java程序,它本身不能单独运行(因为本身没有main()),需要嵌入在一个HTML文件中,借助浏览器或者appletviewer来解释执行.   App ...

随机推荐

  1. fatal: protocol error: bad line length character: This

    昨晚尝试搭建一个Git服务器,在搭建好服务器后,在服务器创建了一个空项目,我在本地使用git clone 拉取项目时,报了fatal: protocol error: bad line length ...

  2. JScrollPane的使用

    概述 jScrollPane.js是一个轻量级的滑块插件, 非常方便使用. 在前端工业界(写页面)使用非常广泛, 下面我记录下用法, 供以后开发时参考, 相信对其他人也有用. PS: 想起之前我用im ...

  3. gitlab 一键 merge request(III)

    已经有两位同学写过类似的 wiki 了,值得一看: gitlab一键提交request merge & assign 为啥我又来凑热闹呢?基于下面两个原由: 我的机子是 Win10,上面脚本的 ...

  4. 小鬼难缠--python小bug备忘

    今天编译pyhon做人脸识别,遇到几个问题,做个记录吧. 编译报错: File "harrClassifier.py", line 17, in <module> fl ...

  5. ARM架构处理器扩展结构-NEON

    是适用于ARM Cortex-A系列处理器的一种128位SIMD(Single Instruction, Multiple Data,单指令.多数据)扩展结构. 从智能手机和移动计算设备到HDTV,它 ...

  6. JAVA发送http get/post请求,调用http接口、方法

    import java.io.BufferedReader; import java.io.IOException;import java.io.InputStream; import java.io ...

  7. JsExcelXml.js的源码

    var JSXmlExcel = { ConvertXmlDoc: function (text) { var xmlDoc = null; try { xmlDoc = new ActiveXObj ...

  8. Android 源码分析01_AsyncTask

    [参考文献] http://blog.csdn.net/singwhatiwanna/article/details/17596225 /* * Copyright (C) 2008 The Andr ...

  9. 前端通信:ajax设计方案(十)--- 完善Promise A+规范,增加mock数据功能

    半年不迭代,迭代搞半年,说的就是我,这里有点尴尬了,直接进入主题吧 我记得在这篇博客的时候集成了Promise的,不过那个时候就简简单单的写了一点最基础,在一些特殊的case上,还是有点问题的,所以才 ...

  10. Kafka实战-Kafka Cluster

    1.概述 在<Kafka实战-入门>一篇中,为大家介绍了Kafka的相关背景.原理架构以及一些关键知识点,本篇博客为大家来赘述一下Kafka Cluster的相关内容,下面是今天为大家分享 ...