Java容器---基本概念
1.持有对象
Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念: (1) Collection: 一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。 (2)Map: 一组成对的“键值对”对象,允许你使用键来查找值。ArrayList允许你使用数字来查找值,因此在某种意义上讲,它将数字与对象关联在了一起。映射允许我们使用另一个对象来查找某个对象,它也被称为“关联数组”,因为它将某些对象与另外一些对象关联在了一 起,或者被称为“字典”,因为你可以使用键对象来查找值对象,就像在字典中使用单词来定义 一样。 |
![]() |
2.面向接口的编程思想
Map是强大的编程工具。尽管并非总是这样,但是在理想情况下,你编写的大部分代码都是在与这些接口打交道, 并且你唯一需要指定所使用的精确类型的地方就是在创建的时候。你可以像下面创建一个List:
List<Apple> apples = new Arraylist<Apple>();
因此,你应该创建一个具体类的对象,将其转型为对应的接口,然后在其余的代码中都使用这个接口。这种方式并非总能奏效,因为某些类具有额外的功能,例如,LinkedList具有在List接口中未包含的额外方法,而TreeMap也具有在Map接口中未包含的方法。如果你需要使用这些方法,就不能将它们向上转型为更通用的接口。
3.泛型和类型安全的容器
使用Java SE5之前的容器的一个主要问题就是编译器允许你向容器中插入不正确的类型。例如,考虑一个Apple对象的容器,我们使用最基本最可靠的容器ArrayList。现在,你可以把ArrayList当作 “可以自动扩充自身尺寸的数组” 来看待。使用ArrayList相当简单:创建一个实例,用add()插入对象,然后用get()访问这些对象,此时需要使用索引,就像数组一样,但是不需要方括号。ArrayList还有一个size()方法,使你可以知道已经有多少元素添加了进来,从而不会不小心因素引越界而引发错误。
如果我们把Apple和Orange都放置在了容器中,然后将它们取出。正常情况下,Java编译器会报告警告信息,因为没有使用泛型。Apple和Orange类是有区别的,它们除了都是Object之外没有任何共性( 如果一个类没有显式地声明继承自哪个类,那么它自动地继承自Object的)。因为 ArrayList保存的是 Object, 因此你不仅可以通过ArrayList的add()方法将Apple对象放进这个容器,还可以添加 Orange对象,而且无论在编译期还是运行时都不会有问题。
But,当你在使用ArrayList的get()方法来取出你认为是 Apple的对象时,你得到的只是 Object的引用, 必须将其转型为Apple,因此,需要将整个表边式括起来, 在调用Apple的id()方法之前,强制执行转型。否则,你就会得到语法错误。在运行时,当你试图将Orange对象转型为Apple肘,你就会以前面提及的异常的形式得到一个错误。
使用Java泛型来创建类会比较复杂。但是,应用预定义的泛型通常会很简单。例如,要想定义用来保存Apple对象的ArrayList ,你可以声明 ArrayList<Apple>,而不仅仅只是ArrayList ,其中尖括号括起来的是类型参数(可以有多个), 它指定了这个容器实例可以保存的类型。通过使用泛型, 就可以在编译期防止将错误类型的对象放置到容器中。
List<Apple> apples = new Arraylist<Apple>();
现在, 编译器可以阻止你将Orange放置到apples中, 因此它变成了一个编译期错误,而不再是运行时错误。 你还应该注意到, 在将元素从List中取出肘, 类型转换也不再是必需的了。 因为List知道它保存的是什么类型, 因此它会在调用get()时替你执行转型。 这样, 通过使用泛型, 你不仅知道编译器将会检查你放置到容器中的对象类型, 而且在使用容器中的对象时, 可以使用更加清晰的语法。
所有的Collection都可以用foreach语法遍历,但是被称为“迭代器”类会的更灵活。
2018-01-01 内容来自《Java编程思想》
Java容器---基本概念的更多相关文章
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- 【Java心得总结五】Java容器上——容器初探
在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...
- java容器---集合总结
思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...
- 3)Java容器
3)Java容器 Java的集合框架核心主要有三种:List.Set和Map.这里的 Collection.List.Set和Map都是接口(Interface). List lst = new ...
- JAVA容器
JAVA容器 一.容器体系结构 java.util 二.迭代器Iterator<E> 迭代器是一种设计模式,可以遍历并选择序列中的对象,而开发人员并不需要了解该序列的底层结构.迭代器通常被 ...
- Java 容器相关知识全面总结
Java实用类库提供了一套相当完整的容器来帮助我们解决很多具体问题.因为我本身是一名Android开发者,包括我在内很多安卓开发,最拿手的就是ListView(RecycleView)+BaseAda ...
- 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
对于公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为<基于Java容 ...
- Java——容器类库框架浅析
前言 通常,我们总是在程序运行过程中才获得一些条件去创建对象,这些动态创建的对象就需要使用一些方式去保存.我们可以使用数组去存储,但是需要注意数组的尺寸一旦定义便不可修改,而我们并不知道程序在运行过程 ...
- 工作随笔—Java容器基础知识分享(持有对象)
1. 概述 通常,程序总是运行时才知道的根据某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型,为解决这个普遍的编程问题:需要在任意时刻和任意位置创建任意数量的对象,所以,就 ...
随机推荐
- ZJOI2018 D1
归途的车上满是悲伤的气息 虽然早就预言到D1会滚粗,但一切都结束之后还是特别难过. 延时15min 50min T1 30pts 1.5h T2 10pts 2.5h T1 50pts 4.5h T3 ...
- BZOJ2595 [Wc2008]游览计划 【状压dp + 最短路】
题目链接 BZOJ2595 题解 著名的斯坦纳树问题 设\(f[i][j][s]\)表示点\((i,j)\)与景点联通状况为\(s\)的最小志愿者数 设\(val[i][j]\)为\((i,j)\)需 ...
- redis2.8.xx安装配置
一.简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集 ...
- 【bzoj4036】按位或
Portal --> bzoj4036 Solution 感觉容斥的东西内容有点qwq多啊qwq还是以题目的形式来慢慢补档好了 这里补的是min-max容斥 其实min-max容斥 ...
- Spring MVC @ModelAttribute详解
被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用. 我们编写控制器代码时,会将保存方法独立 ...
- Linux下UDP一发一收通信
实现在Linux环境下的UDP通信测试. 注释了while循环,将代码规范化. udpserver.c代码: /******************************************** ...
- ACM选修hust 1075 组合+数学+期望值
Description Input Output Sample Input 2 2 1 0 1 1 0 3 1 0 1 1 1 0 1 1 1 0 Sample Output 0.500 1.125 ...
- 使用CSS3创建文字颜色渐变(CSS3 Text Gradient)
考虑一下,如何在网页中达到类似以下文字渐变的效果? 传统的实现中,是用一副透明渐变的图片覆盖在文字上.具体实现方式可参考 http://www.qianduan.net/css-gradient-te ...
- [php]http响应头解析
(Status-Line) HTTP/ OK Cache-Control no-cache Content-Length Content-Type image/gif Date Sat, Dec :: ...
- DOM基础操作
本文地址:http://www.cnblogs.com/veinyin/p/7606972.html 1 访问 HTML 元素 常用方法 document.getElementById(" ...