thinkinginjava学习笔记10_容器
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_容器的更多相关文章
- Docker学习笔记 - Docker容器内部署redis
Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...
- Docker学习笔记 - Docker容器之间的连接
学习目标: 容器之间可以相互连接访问:: --link redis:redisAlias 准备工作 FROM ubuntu:14.04 RUN apt-get install -y ping RUN ...
- thinkinginjava学习笔记01_导论
初学java,希望旅途愉快 :) 类型决定对象的接口,(有人认为类是类型的特定实现),接口确定对象所能发出的请求(消息),满足请求的代码和隐藏的数据一起构成实现: 对象设计时,应该很好地完成一项任务 ...
- Docker学习笔记 - Docker容器与外部网络的连接
学习目的: ip_forward 包过滤防护墙 iptables 允许端口映射访问 限制ip访问容器 1.ip_forward 控制系统是否会转发流量 检查linux系统转发是否开启命令:sysctl ...
- Java 学习笔记(10)——容器
之前学习了java中从语法到常用类的部分.在编程中有这样一类需求,就是要保存批量的相同数据类型.针对这种需求一般都是使用容器来存储.之前说过Java中的数组,但是数组不能改变长度.Java中提供了另一 ...
- spring源码学习笔记之容器的基本实现(一)
前言 最近学习了<<Spring源码深度解析>>受益匪浅,本博客是对学习内容的一个总结.分享,方便日后自己复习或与一同学习的小伙伴一起探讨之用. 建议与源码配合使用,效果更嘉, ...
- Qt学习笔记常用容器
主要说Qt的以下几种容器 1.QList<T> 2.QLinkedList<T> 3.Map<T> 和一些常用的容器方法的使用 qSort qCopy qFind ...
- docker学习笔记:容器的网络设置
创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头. 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器 ...
- thinkinginjava学习笔记07_多态
在上一节的学习中,强调继承一般在需要向上转型时才有必要上场,否则都应该谨慎使用: 向上转型和绑定 向上转型是指子类向基类转型,由于子类拥有基类中的所有接口,所以向上转型的过程是安全无损的,所有对基类进 ...
随机推荐
- mysql如何查看索引使用情况以及优化 - guols0612
mysql中支持hash和btree索引.innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引 我们可以通过下面语句查询当前索引使用情况: ...
- Linux磁盘分区(二):删除
***********************************************声明************************************************ 原创 ...
- 配置scrapy-splash+python爬取医院信息(利用了scrapy-splash)
北京艾丽斯妇科医院(http://fuke.fuke120.com/) 首先先说一下配置splash 1.利用pip安装scrapy-splash库 pip install scrapy-splash ...
- mysql数据库的安装及体系说明
第1章 MySQL介绍 1.1 数据的定义 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质.状态以及相互关系等进行记载的物理符号或这些物理符号的组合,是可识别.抽象的符号 1.2 数据 ...
- 响应式框架Bootstrap栅格系统
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8&qu ...
- keeplived日志位置指定
作为一个运维DBA,除了关心数据库的关键指数.还得往架构和底层基础知识多靠拢. 2010年刚工作的时候,那会Cacti监控比較流行吧.可恶的是SNMP会把默认日志写到系统日志文件中面,导致排错时非常受 ...
- cocos2d+TexturePackerGUI动画制作
转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/25168047 程序效果图: 1.下载安装TexturePackerGUI 地址:htt ...
- HDU 4960 Another OCD Patient(记忆化搜索)
HDU 4960 Another OCD Patient pid=4960" target="_blank" style="">题目链接 记忆化 ...
- spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站
1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建 ...
- 对使用多个swiper下标有时显示不出来的问题
这久写了一个网页,其中有很多的轮播图及tab页面切换,就使用了swiper框架,有时一个网页要用到6-8个,如此就出现了下图这种问题: 有时刷新看不到,有时又能看到,tab切换过去的页面也看不到,其实 ...