Java早期版本只给集合类库提供了很少的一组类,但是随着Java版本的升级,Java集合类库越来越充实。集合类库里面存放的,是各式各样的数据容器,我们基本都学过数据结构这门课,数据结构所讲的就是ADT(抽象数据模型)的部分,数据结构不是针对于某一门语言,它所讲的通常是对各语言都通用的ADT部分,ADT和具体实现是没有关系的。但是根据教材、根据各专业的不同,各专业会选用使用不同编程语言实现的教材。而我们所讲的,就是如何使用Java数据容器,即Java集合(用Java实现的ADT),具体的实现部分,我将在算法与数据结构中进行阐述。

我们在知道如何使用它们之前,首先要对他们的原理有大致的了解。

Java集合类库将接口和实现分离。首先,看一下Queue队列是怎么分离的。

interface Queue<E>
{
void add (E element);
E remove();
int size();
}

Queue<E> 是泛型方面的内容,我将在下一篇JavaSE的总结中给出。现阶段只需要明白,Queue<String> 代表的就是在该队列中只能存放String类型的对象,泛型进行了类型限定的作用。将接口与实现分离,是现代程序设计的有效的解耦方式之一。

在Java类库中,集合类的基本接口是Collection,而Collection接口又继承了iterator接口

public interface iterator<E>
{
E next();
boolean hasNext();
void remove();
} public interface Iterable<E>
{
Iterator<E> iterator();
} public interface Collection<E> extends iterable<E>
{
boolean add(E element);
Iterator<E> iterator();
//..
}

所有实现了iterable接口的类,都代表着该类是“可迭代的”,可以调用该类的iterator()方法,返回该类的迭代器,通过调用迭代器的next()方法来遍历该类。

值得注意的是,当遍历到最后一个元素时,如果继续调用next()方法,将会抛出一个异常:NoSuchElementException,因此我们通常是这么调用的:

Collection<String> c = ....;
Iterator<String> it = c.iterator();
while(it.hasNext)
{
String s = it.next();
do something with s;
}

还有一点就是, 从JavaSE1.6开始所有实现iterable接口的类都可以使用一种加强型的for循环:

for(String s: c)
{
do something with s;
}

看到这里也许你会发现,Java类库中提供了这些接口及其实现,但是如果我们需要自己实现一个Queue,那岂不是很麻烦?

实际上Java类库设计了一组抽象类,AbstractCollection等等,实际的实现者无需实现所有的例行方法,大大减轻了负担。

Java集合类库中的集合主要分为以下几种:

1.List(表)

2.Set(集)

3.Map(图…对翻译无力吐槽,我更喜欢称之为映射)

Set

Set接口继承于Collection接口,它没有提供额外的方法,但实现了Set接口的集合类中的元素是无序且不可重复。

特征:无序且不可重复。

List

List接口同样也继承于Collection接口,但是与Set接口恰恰相反,List接口的集合类中的元素是对象有序且可重复。

特征:有序且可重复。

两个重要的实现类:ArrayList和LinkedList

1.ArrayList特点是有序可重复的

2.LinkedList是一个双向链表结构的。

Map

Map也是接口,但没有继承Collection接口。该接口描述了从不重复的键到值的映射。Map接口用于维护键/值对(key/value pairs)。

特征:它描述了从不重复的键到值的映射。

两个重要的实现类:HashMap和TreeMap

1.HashMap,中文叫散列表,基于哈希表实现,特点就是键值对的映射关系。一个key对应一个Value。HashMap中元素的排列顺序是不固定的。更加适合于对元素进行插入、删除和定位。

2.TreeMap,基于红黑书实现。TreeMap中的元素保持着某种固定的顺序。更加适合于对元素的顺序遍历。

Collections算法类:

Collections是一个算法类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化等操作,具体的可以参考以下:

http://www.360doc.com/content/14/0829/10/15242507_405537400.shtml

JavaSE复习总结之集合(Collection)的更多相关文章

  1. JavaSE复习(七)Stream流和方法引用

    Stream流 全新的Stream概念,用于解决已有集合类库既有的弊端. 传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作.而当我们 ...

  2. javaSE复习之——线程

    线程其实就是程序执行的一条路径,一个进程中可以包含多条线程,多线程并发执行可以提高程序效率,可以同使完成多项任务 多线程的应用场景 迅雷多线程一起下载 服务器同时处理多个客户请求 多线程原理(单核CP ...

  3. Guava库介绍之集合(Collection)相关的API

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  4. 【再探backbone 02】集合-Collection

    前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...

  5. 5、数组和集合--Collection、Map

    一.数组:同一个类型数据的集合,其实他也是一个容器 1.数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些数据 2.数组的定义: 在Java中常见: 格式1:  类型 [] 数组名 = ne ...

  6. WCF分布式开发步步为赢(8):使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据

    数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NE ...

  7. 在含有null值的复杂类的集合(Collection)中取最大值

    在日常编程中,经常遇到要在一组复杂类的集合(Collection)中做比较.取最大值或最小值. 举个最简单的例子,我们要在一个如下结构的集合中选取包含最大值的元素: public class Clas ...

  8. 集合Collection总览

    前言 声明,本文使用的是JDK1.8 从今天开始正式去学习Java基础中最重要的东西--->集合 无论在开发中,在面试中这个知识点都是非常非常重要的,因此,我在此花费的时间也是很多,得参阅挺多的 ...

  9. java中集合Collection转list对象

    参考:java中集合Collection转list对象 首先我的需求是获取到购物车列表,购物车列表是一个Map对象,构造方法获取购物项,这里购物项是Collection对象 // 购物项集合,K商品I ...

随机推荐

  1. gulp-babel 取消严格模式方法

    最近项目决定用ES6语法重构,于是引入了gulp-babel去编译ES6. 问题来了,babel编译ES6会自动添加"use strict"在js文件的最前面,这就导致之前的项目文 ...

  2. iOS 适配iOS9

    1.网络接口不支持https协议,在iOS9下 在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据. 解决方案(以下方法2选1): (1)暂时退回到http协议 ...

  3. BT5 & Kali Linux 网卡选择

    [需要注意的几点]: 芯片类型 知否支持外接天线 网卡固件版本 支持的无线协议 网卡功率 BT5/Kali  RC3支持网卡: RTL8187, R8187 (Realtek) 功率高.兼容性好 Ra ...

  4. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q29-Q31)

    Question 29 You are designing a SharePoint 2010 intranet site at your company. The accounting depart ...

  5. JavaScript学习13 JavaScript中的继承

    JavaScript学习13 JavaScript中的继承 继承第一种方式:对象冒充 <script type="text/javascript"> //继承第一种方式 ...

  6. 如何获取应用宝APP ID

    二百二维码支持绑定应用宝ID后,android 扫码下载后,微信直接下载APP,不打开应用宝页面,非常方便APP进行推广 那如何获取应用宝APP ID呢, 请参考下面的教程    一, 打开http: ...

  7. C语言中的变量

    1. 计算机需要处理数据 2.数据需要保存在存储器上 3. 计算机只能识别0或者1的二进制数据 4.我们看到的,用到的所有数据在计算机中都是以二进制存储的 5.内存中的相同的01二进制数据,以不同的编 ...

  8. OC 多态

    OC 多态 多态的概念 没有继承,就没有多态 不同类的对象能够定义相同名称的方法 当父类对象的指针或引用指向子类对象时,会进行动态监测,调用真实的方法 C++只有虚函数才能实现多态,OC中所有方法都可 ...

  9. xdebug + wincachegrind

    ;;;;;;;php.ini;;;;;;;;;;;;;;;;;; [Xdebug]zend_extension=D:\Xampp\php\ext\php_xdebug.dll;开启自动跟踪xdebug ...

  10. yii2 输出xml格式数据

    作者:白狼 出处:http://www.manks.top/yii2_xml_response.html.html本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文 ...