Java中并没有像Perl、Python、Ruby那样对容器有直接的支持,但是可以依靠容器类来完成相同的工作;

泛型

使用一个ArrayList对象可以保存一系列的对象,如: ArrayList apples = new ArrayList(); 申明一个ArrayList对象apples,接下来可以往apples中添加对象:apples.add(object),也可以根据索引获取对象:apples.get(index),此时,放置的对象都是Object类型的,这是不安全的类型,因为不能保证所有的对象都使用同一个接口,当里面放置了两种不同类型的对象时,就会产生某些问题;

为了使用更加安全的容器,需要用到泛型,如示例代码中展示的那样,使用一对尖括号来表示泛型:ArrayList<Apple> apples = new ArrayList<Apple>();此时,如果往该容器中添加其他类型的对象,编译器就会发现并且报错;同时可以看到,泛型支持向上转型;

容器的类型

容器可以分为两种:

1. Collection,单独元素的序列对象,包括:List、Set、Queue;

2. Map,一组成对的“键值对”对象;

容器类型使用中,创建一个具体类的对象,然后转型为对应引用,之后针对该接口进行编程;如:ArrayList 是List的子类,可以申明:

List<Apple> apples = new ArrayList<Apple>();

此时ArrayList被向上转型为List,保证只用到List中的接口而没有用到ArrayList的特有接口的话,这样的申明可以让对象的具体类变化更加方便,如更改为LinkedList:

List<Apple> apples = new LinkedList<Apple>();

而不用更改其他的任何代码,因为所有的工作都是在List的接口上进行的;

所有的Collection都支持foreach语法;

通过Collection.addAll()方法可以添加一个Collection对象来完成初始化;用新建一个空的Collection对象,然后再用Collections.addAll()方法来添加对象更加快捷,是首选的初始化方式;如示例代码中,新建Collections.addAll将更多的元素添加到第一个参数:collection对象中;同样的Arrays.asList()可以更加快捷地生成ArrayList对象;

Arrays.asList()可能会产生一些问题,并不能根据左边的式子进行向上转型,需要显示申明类型,如:Arrays.<Snow>asList();来进行准确的操作;

List

List类包含两种类型:

ArrayList:在数组中随机访问元素速度较快,但是插入元素和删除元素较慢;

LinkedList:访问元素速度较慢,但是插入和删除元素较快;

具体的方法查看手册:http://docs.oracle.com/javase/7/docs/api/java/util/List.html

LinkedList提供Queue和Stack的支持;由于设计上的缺陷,最好取消使用Stack,而使用LinkedList代替;

Map

Map类包含:

HashMap:设计用来快速访问,其中键是无序保存;

TreeMap:键始终处于排序状态,访问速度较慢;

LinkedHashMap:保持元素的插入顺序,同时提供快速的访问能力;

总结

这章讲的有的碎,比较好的是下面的分类图:

其中虚线框表示接口,实线框表示具体类,黑线框是比较常用的容器;空心箭头表示一个特定的类实线一个接口,实心箭头表示某个类可以生成箭头所指向类的对象;

具体的就看文档吧,感觉更加清晰并且具体一些

thinkinginjava学习笔记10_容器的更多相关文章

  1. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  2. Docker学习笔记 - Docker容器之间的连接

    学习目标: 容器之间可以相互连接访问:: --link redis:redisAlias 准备工作 FROM ubuntu:14.04 RUN apt-get install -y ping RUN  ...

  3. thinkinginjava学习笔记01_导论

    初学java,希望旅途愉快  :) 类型决定对象的接口,(有人认为类是类型的特定实现),接口确定对象所能发出的请求(消息),满足请求的代码和隐藏的数据一起构成实现: 对象设计时,应该很好地完成一项任务 ...

  4. Docker学习笔记 - Docker容器与外部网络的连接

    学习目的: ip_forward 包过滤防护墙 iptables 允许端口映射访问 限制ip访问容器 1.ip_forward 控制系统是否会转发流量 检查linux系统转发是否开启命令:sysctl ...

  5. Java 学习笔记(10)——容器

    之前学习了java中从语法到常用类的部分.在编程中有这样一类需求,就是要保存批量的相同数据类型.针对这种需求一般都是使用容器来存储.之前说过Java中的数组,但是数组不能改变长度.Java中提供了另一 ...

  6. spring源码学习笔记之容器的基本实现(一)

    前言 最近学习了<<Spring源码深度解析>>受益匪浅,本博客是对学习内容的一个总结.分享,方便日后自己复习或与一同学习的小伙伴一起探讨之用. 建议与源码配合使用,效果更嘉, ...

  7. Qt学习笔记常用容器

    主要说Qt的以下几种容器 1.QList<T> 2.QLinkedList<T> 3.Map<T> 和一些常用的容器方法的使用 qSort qCopy qFind ...

  8. docker学习笔记:容器的网络设置

    创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头. 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器 ...

  9. thinkinginjava学习笔记07_多态

    在上一节的学习中,强调继承一般在需要向上转型时才有必要上场,否则都应该谨慎使用: 向上转型和绑定 向上转型是指子类向基类转型,由于子类拥有基类中的所有接口,所以向上转型的过程是安全无损的,所有对基类进 ...

随机推荐

  1. CCF-201403-1-相反数

    问题描述 试题编号: 201403-1 试题名称: 相反数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有 N 个非零且各不相同的整数.请你编一个程序求出它们中有多少对相反 ...

  2. yum中$releasever、 $basearch等变量含义

    [root@kickstart ~]# rpm -qf /etc/redhat-release centos-release--4.1708.el7.centos.x86_64 yum中的$relea ...

  3. UWP Flyout浮动控件

    看见没,点击"Options"按钮,浮动出来一个界面,这个界面可以用xaml自定义. 如果要点击的控件又Flyout属性那么,可以直接按照下面用 <Button Conten ...

  4. SQL Server学习之路(四):“增删改查”之“删”

    0.目录 1.前言 2.通过SSMS删除 3.通过SQL语句删除 3.1 删除单行数据 3.2 删除所有行数据 3.3 删除表和数据库 1.前言 增删改查都是对数据的操作,其中"删" ...

  5. Docker: 限制容器可用的内存

    默认情况下容器使用的资源是不受限制的.也就是可以使用主机内核调度器所允许的最大资源.但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,本文介绍如何限制容器可以使用的主机内存. 为什么要 ...

  6. SQL Server Profiler的使用

    最近一个项目,使用微软的Entity Framework的ORM框架的项目,部署到现场后,出现了系统缓慢,多个客户端的内存溢出崩溃的问题. 打开了SQL Server Profiler排查,发现有全表 ...

  7. CS Round#50 D min-races

    Min Races Time limit: 1000 msMemory limit: 256 MB   In a racing championship there are N racing driv ...

  8. Android数据绑定技术一,企业级开发

    PS:数据绑定,顾名思义是数据与一些控件或者用户账号等绑定,这样用的好处是便于管理.代码清晰,量少. 首先要了解什么是数据绑定? 为什么要用数据绑定? 怎么用数据绑定? 语法的使用 简单例子,数据绑定 ...

  9. Okio 之初探黄龙

    Okio 是一个包装了 java.io 和 java.nio api 的库,以便可以更容易的访问.存储以及处理数据. ByteStrings 和 Buffers Okio 是围绕着两个容器类构建起来的 ...

  10. Spring Cloud 自定义ConfigServer

    公司需要将系统配置信息中的敏感信息独立存放. 现有系统采用Spring Cloud Config提供配置信息,其中敏感信息主要是Db配置,分解本次需求: (1)数据库配置信息分离(主要是Db信息). ...