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_多态
在上一节的学习中,强调继承一般在需要向上转型时才有必要上场,否则都应该谨慎使用: 向上转型和绑定 向上转型是指子类向基类转型,由于子类拥有基类中的所有接口,所以向上转型的过程是安全无损的,所有对基类进 ...
随机推荐
- CS Round#49 C Max Substring
Max Substring Time limit: 1000 msMemory limit: 256 MB You are given a string S. Find a string T th ...
- 防止UI穿透操作到游戏场景
#if UNITY_EDITOR || UNITY_STANDALONE_WIN if (EventSystem.current.IsPointerOverGameObject()) { return ...
- IQKeyboardManager 状态栏(status bar)问题
因为懒,所以具体什么样子,参考下面的链接 具体的问题情况参考:StatusBar background problem #1158 我解决的思路很简单,就是在监听键盘消失的时候,去设置 statys ...
- 用shell制作IP脚本
vim ip.sh #!/bin/bashread -p "eth:" eread -p "ip:" ip1read -p "netmask:&qu ...
- OJ随笔——【1102-海明距离】——位运算
题目如下: Description 海明距离是在指二进制情况下,一个整数变成另外一个整数需要翻转的位数.比如2转换到3需要翻转1位,所以2到3的海明距离是1.给你两个正整数x和y,(x,y<=1 ...
- 【Linux探索之旅】第二部分第五课:用户和权限,有权就任性
内容简单介绍 .第二部分第五课:用户和权限,有权就任性 2.第二部分第六课预告:Nano,刚開始学习的人的文本编辑器 用户和权限.有权就任性 今天的标题也挺任性的啊,虽说小编是一个非常本分的人(真的吗 ...
- xml概述(1)
本节要点: 标记语言的定义 XML简介 XML与HTML 比较 XML与数据库比较 XML的特点 XML结构 1 标记语言的定义 "XML.SGML.HTML"中的"ML ...
- 关于MySql中使用IFNULL()函数失效的问题。
今天在学习时,碰到一个问题:在联表查询取得结果后,如果取得的结果是空值,则给一个默认值,如果不是空值,则返回这个值. 下面我们来看看业务场景: 在menu表中: 存储的是前端页面的菜单配置,注意成员权 ...
- idea 配置热部署
1. 2.
- 本地代码上传到GitHub---拷贝github代码
来这里: 转载请标明出处: http://blog.csdn.net/hanhailong726188/article/details/46738929 步骤: git init git add na ...