Java 重点 | Collection 集合
Collection 集合
概述
什么是集合?有什么用?数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。集合为什么说在开发中使用较多?集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库,数据库当中有 10 条记录,那么假设把这 10 条记录查询出来,在 java 程序中会将 10 条数据封装成 10 个 java 对象,然后将 10 个 java 对象放到某一个集合当中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来。
集合不能直接存储基本数据类型,另外集合也不能直接存储 java 对象,集合当中存储的都是 java 对象的内存地址。(或者说集合中存储的是引用。)list.add(100);//自动装箱 Integer 注意: 集合在 iava 中本身是一个容器,是一个对象。集合中任何时候存储的都是"引用"。
集合和数组既然都是容器,它们有啥区别呢? 。数组的长度是固定的。集合的长度是可变的。数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
在 iava 中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中存储元素,等于将数据放到了不同的数据结构当中。什么是数据结构?数据存储的结构就是数据结构。不同的数据结构,数据存储方式不同。例如:数组、二叉树、链表、哈希表...以上这些都是常见的数据结构,你往集合 c1 中放数据,可能是放到数组上了。你往集合 c2 中放数据,可能是放到二叉树上了。你使用不同的集合等同于使用了不同的数据结构。不同集合对应不同数据结构。你在 iava 集合这一章节,你需要掌握的不是精通数据结构。java 中已经将数据结构实现了,已经写好了这些常用的集合类,你只需要掌握怎么用?在什么情况下选择哪一种合适的集合去使用即可。new ArrayList();创建一个集合,底层是数组。new LinkedList();创建一个集合对象,底层是链表。new TreeSet();创建一个集合对象,底层是二叉树。.....
集合在 java JDK 中哪个包下?java.util.*; 所有的集合类和集合接口都在 java util 包下。为了让大家掌握集合这块的内容,最好能将集合的继承结构图背会!!! 集合整个这个体系是怎样的一个结构,需要有印象,后面会介绍继承结构图。
在 java 中集合分为两大类:一类是单个方式存储元素: 单个方式存储元素,这一类集合中超级父接口:java.util.Collection 一类是以键值对儿的方式存储元素 以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map; 本篇文章会详细介绍 Collection 集合的全家桶。
Collection 集合继承结构图
以后的开发主要是用这几个实现类,所以在这个图上就介绍这几个,并不代表就只有这些。
详细介绍
Iterable:可迭代的,可遍历的,所有集合元素都是可迭代的,可遍历的。所有集合继承 Iterable 的含义是,所有集合都是可迭代的。
Iterator:集合的迭代器对象。 Collection 继承 Iterable 中的 iterator()方法,调用此方法返回 Iterator 迭代器对象,这个迭代器对象中有 hasNext()方法、next()方法、remove()方法来完成集合的遍历。
Collection:定义的是所有单列集合中共性的方法,所有单列集合都可以使用共性的方法,没有带索引的方法。
List 集合存储元素特点:有序可重复,存储的元素有下标。有序实际上是说存进去是这个顺序,取出来还是这个顺序,这里的顺序不是说按照大小排序。有序是因为 List 集合都有下标,下标从 0 开始,以 1 递增。
ArrayList 集合:底层采用了数组这种数据结构,ArrayList 集合是非线程安全的。
LinkedList 集合:底层采用了双向链表数据结构,对于链表数据结构来说,随机增删效率较高,检索效率较低,链表中的元素,在空间存储上,内存地址不连续。
Vector 集合:底层采用了数组这种数据结构,Vector 集合是线程安全的,Vector 所有方法都有 syndronized 关键字修饰,所以线程安全,但是效率较低,现在保证线程安全有别的方案,所以 Vector 使用较少了。
Set 焦合存储元素特点:无字不可重复,无序表示存进去是这个顺序,取出来就不一定是这个顺字了,另外 Set 集合中元素没有下标。 Set 集合中的元素还不能重复。
HashSet 集合:在 new 的时候,底层实际上 new 了一个 HashMap 集合。向 HashSet 集合中存储元素,实际上是存储到 HashMap 集合中了。HashMap 集合是一个哈希表数据结构,HashSet 集合初始化容量 16。扩容:扩容之后是原容量的 2 倍。
SortedSet 集合存储元素的特点:由于继承了 Set 集合,所以它的特点也是无序不可重复,但是放在 SortedSet 集合中的元素可以自动排序。我们成为可排序集合。放到该集合中的元素是自动按照大小顺序排序的。
TreeSet 集合:底层实际上是 TreeMap newTreeSet 集合的时候,底层实际上 new 了一个 TreeMap 集合。往 TreeSet 集合中放数据的时候,实际上是将数据放到 TreeMap 集合中了。TreeMap 集合底层采用了二叉树数据结构。
Collection 接口的常用方法
详细介绍
Collection 的两个方法需要注意的问题
Iterator 迭代器
迭代器的代码实现
迭代器和 remove 方法冲突问题
总结:
增强 for 循环
注意:增强 for 循环必须有遍历的目标。目标只能是 Collection 或者是数组增强 for 循环仅仅只能是作为遍历操作出现工作或者学习过程中,只要是遍历,就使用增强 for 循环
版权声明: 本文为 InfoQ 作者【几分醉意.】的原创文章。
原文链接:【http://xie.infoq.cn/article/6425ea1747664873ad5825f90】。文章转载请联系作者。
评论