java集合框架是什么?
java集合框架是对数据结构和算法用法的实现的封装,包括map、set、list、tree、array、hastabel等其他的集合类型.
在C++中类似的是标准模板库.
java集合框架解决了什么问题?
我们在程序设计中,需要处理的数据分为基本数据和复合数据,后者常见的组织形式就是类。类对象通常是以动态形式分配的。
譬如在内存空间分配new一个对象。我们在处理的时候,面对的不是单个基本对象或者单个基本类,而是多个数据类型,那么用什么来处理多个对象呢?就是数组。数组也是一种实现集合的数据结构,可以存放多个数据。
数组的优点是通过下标检索元素非常方便,但是缺点也是显而易见:空间固定而且不能够稳定增长。所以不是解决一切集合问题的工具。我们可能需要一些新的数据结构的工具来处理集合,其实数组本身就是一种线下有序的数据结构。
数据结构的基础就是集合论.为什么这么说呢?上面说过,现在我们要研究的不是单个的基 本类型或对象,多个对象的整体不就是集合吗?从OO的角度上看,集合也是一种对象,但它是一种特殊的对象:对象的容器(注意,我们这里没有继续讨论基本类 型的集合,因为基本类型和存储分配方式与对象有着本质的差别)。集合论的一个根本问题就是:给定一个元素,集合必须能够回答该元素是或者不是属于这个集 合。还有一个问题也很重要,就是:如果元素是属于一个集合,那该元素在集合中的地位应该是唯一的,或者说它是唯一确定的。当然还有其它问题,譬如查找、遍历、排序等等,这和具体的集合类型相关,后面将会讲到。
JCF框架的结构介绍和一些基本概念
一:结构
下面这张图是常见的JCF框架的结构图
上面图看起来非常的多,比较乱,其实很多的软件的一个模块的设计都比这复杂。
上面黑色背景的表示是接口,我们可以看到
java提供了以下接口
第一级:Collection、
第一级:Collection、
二级: List接口、Set接口、Map接口
三级: RandomAcess、SortedSet、SortedMap
如果我们学过数学或者没有忘记的话,应该知道,List、Set、Map其实是对数学集合概念的抽象和封装。
我们把Collection接口置于最顶上,意思是想说:Collection其实是整个JCF家族中的“祖宗”,几乎所有的JCF成员都源自该接口,或者和它有密切的关系,看过Collection接口的文档或者源码就可以知道,Collection提供关于集合的一些通用操作的接口,包括插入(add()方法)、删除(remove()方法)、判断一个元素是不是其成员(contains()方法)、遍历(iterator()方法)等等。注意了,前面的“废话”在这里将得到体现:Set接口体现的是“无序集”的概念,它是不允许有重复元素出现的;
List接口代表“有序集”;而Map接口则是“映射” ,其实Map.Entry接口就是代表一个“元素对”我们可以通过Map的entrySet() 方法得到这样一个由“元素对”组成的Set对象。我们注意到Set和List都是从“祖宗”Collection派生的,而Map不是,毕竟对一对元素的 操作与对单个元素的操作还是有区别的,但是如果你仔细对照一下Collection和Map的源代码,以及它们的直接后代AbstractCollection和AbstractMap的源代码,你将会发现很多相似的地方,所以我们仍然可以把Map看成是和Collection有着血缘关系的接口,而和Set,List一起处于并列的位置。
有了“无序集”,“有序集”和“映射”,我们就可以定义各种各样的抽象数据结构了,譬如常见的向量,链表,堆栈,哈希表,平衡二叉树等。
从上我们了解到了,java集合框架的本质是对数据结构的抽象,
具体内容的掌握
你了解就jcf的层次和一些基本概念后呢,重要的是使用JCF 框架,所以需要了解对象的具体操作,比如List如何操作、Set如何操作
Map如何操作,集合里面包含的算法等等
具体的内容的掌握
1:主要用在哪些方面呢?
1:需要了解集合有哪些元素?遍历元素
2:如何根据条件找到元素?:查找元素
一:Collection:接口
Collection提供了实现了Iterable接口,实现了这个接口表示支持迭代功能。
Collection接口支持添加元素、删除元素、遍历查找元素和是否包含子集方法、并且支持迭代器和转成数组功能。
根据源代码可以看到提供了如下的方法:
size();
isEmpty();
contains();
iterator();
toArray();
add();
remove();
containsAll();
addAll();
removeAll(Collection<?> c);;
retainAll();
clear
并且提高了一个AbstractCollection抽象类,这个抽象类实现了Collection接口,实现了除了Iterator()和size() 外的所有的方法,当然我们也可以找自由的自己去实现这个接口
二:Set接口
1:Set接口实现了Collectio接口,但是不支持重复的元素的,Set的方法和Collection接口方法一样,并没有提供新的功能,这点从源码上可以看的出来。
2:和AbstractCollection一样,java提供了 AbstractSet抽象类,实现了equals()、hashCode ()和removeAll()方法
如何判断集合的对象相等?
3:java提供了2个通用的Set接口的实现:HashSet和TreeSet,通常我们使用这两个类来存储不重复元素。
2.1 HashSet
1: private transient HashMap<E,Object> map 来存储对象
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
看这段代码,创建一个hashset对象的时候,自动分配了一个HashMap对象,
引用资料:
http://www.newsmth.net/pc/pccon.php?id=3559&nid=105600&order=&tid=7082
http://www.janeve.me/articles/which-java-collection-to-use
http://www.developer.com/java/other/article.php/767451/Data-Structures-in-Java-Part-2-What-Is-a-Collection.htm
相关推荐
xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...
JAVA集合框架,java框架总结,java集合框架,java集合框架学习,java集合框架类
2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...
大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师测试题.doc 广州传智播客JavaEE工程师测试题(带答案的).doc 应聘时最漂亮的回答.docx 当面试官问「你有...
大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师测试题.doc 广州传智播客JavaEE工程师测试题(带答案的).doc 应聘时最漂亮的回答.docx 当面试官问「你有...
Java框架研发思考.docx Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc Java面试文档...
大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师测试题.doc 广州传智播客JavaEE工程师测试题(带答案的).doc 应聘时最漂亮的回答.docx 当面试官问「你有...
入坑了 ,内容主要是对Java SE,Java Web,Java EE框架,Java 高级,面试就业和学习编程进行总结整理思考,适合了解 Java ,想进一步深入Java开发的人。 如果觉得不错,请在这个仓库上点个 star 吧,这也是对我的肯定...
Java集合框架 并发编程 框架 Spring SpringBoot 数据库 安全 分布式 微服务 Spring Cloud Dubbo 架构设计 场景设计 缓存 网络 网络学习资源 性能调优 性能调优学习资源 Tomcat 面试题 互联网大厂面试题 技术博客:IT...
第0章 学习Java的正确方法 1 0.1 我适合不适合编程 2 0.2 走出象牙塔 4 0.3 学习Java,应该如此疯狂 7 第1章 经典Java EE应用和开发环境 9 1.1 经典Java EE应用概述 10 1.1.1 Java EE 6相关规范 10 1.1.2 经典Java ...
c#学习笔记(1) ...(Microsoft后来在完全面向.NET框架的开发语言集中加入了Visual J#.NET,算是对Java语言用户的一种照顾。) 有人说,选择C#意味着选择MS(在中国的程序员当中,这并不是件值得自豪的事...
10.5认识Java集合 10.5.1为什么需要集合 10.5.2Java中的集合 10.6使用一维集合 10.6.1认识一维集合 10.6.2使用List集合 10.6.3使用Set集合 10.6.4使用Collections类对集合进行处理 10.6.5使用泛型简化集合...
通过本课程的学习,为学员以后开发使用JEasyui与后台Java框架技术结合的大型Java项目提供了完整示范,奠定基础 2.3、课程特色 特点一、讲师具有一线的实战经验与丰富的教学经验,课程即讲解案例实现思路、...
DbHelperV2 - Teddy的通用数据库访问组件设计和思考 也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取MSSQLServer,Oracel,Access中的数据字典...
19.1 一个较为激进的示例:Ruby on Rails框架中的ActiveRecord库 396 19.2 使用动态特征实现Scala 中的动态调用 397 19.3 关于DSL的一些思考 402 19.4 本章回顾与下一章提要 402 第20章 Scala的领域...
角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。 系统预定义角色 预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下面我们就简单介绍些系统角色: CONNECT...