Java集合
什么是集合?
- Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法
集合与数组的区别
- 数组长度是固定的,集合长度是动态扩展的
- 数组只能存储相同类型的数据,集合可以存储不同数据类型的数据
- 数组可以存储基本类型的数据,也可以是引用类型,而集合只能是引用类型
应用场景
- 无法预测存储数据的数量
- 同时存储具有一对一关系的数据
- 需要进行数据的增删
- 数据重复,可以直接使用集合 Set完成
集合中接口和类的特点
Collection
- 主要用于存储类的对象
- Collection 有三个子接口
- list(有序可重复)
- Queue(有序可重复)
- set(无序可重复)
- List接口主要实现类包括ArrayList和LinkedList 同时实现了Queue接口
- ArrayList的底层实现了数组,因此内存中是连续存储的。查询速度快,但增加和删除速度慢
- LinkedList底层是居于双向链表的,增加和删除速度快,查询速度慢
- Set接口的主要实现类有HashSet和TreeSet
- HashSet是基于哈希表实现的,数组是无序的,HashSet元素可以是null,但是只能有一个null
- TreeSet基于二叉树实现的,可以实现数据的自动排序,确保集合元素处于排序状态,不允许放入空值
- HashSet性能优于TreeSet,一般情况建议使用HashSet,如果需要使用排序功能,建议使用TreeSet
Map
- 用于存储键值对的数据
- Map的主要实现类包括HashMap和TreeMap,其中HashMap基于哈希表实现,TreeMap基于红黑树实现。
- HashMap适用于在Map中插入、删除和定位元素
- TreeMap适用于按自然顺序或自定义顺序对键值进行遍历
- HashMap比TreeMap性能好,所以HashMap使用更多一些,如果需要对数据进行排序可以使用TreeMap
集合框架的体系结构
- Collection (类的对象)
- List(有序,可重复)
- ArrayList
- LinkedList
- Queue(有序,可重复)
- LinkedList
- Set(无序,不可重复)
- HashSet
- List(有序,可重复)
- Map(键值对)
- HashMap<key,value>
List(列表)
- list是元素有序并且可以重复的集合,称之为序列
- LIst可以精确的控制每个元素的插入位置或删除某个位置的元素
- List的主要实现类:ArrayLIst 、LinkedList
ArrayList
- ArrayList 底层是有数组实现的
- 动态增长,以满足应用程序的需求
- 在列表尾部插入活删除数据非常有效
- 更适合查找和更新元素
- ArrayList中的元素 是可以为null
Set
- set 是元素无序并且不可重复的集合
- HashSet
- HashSet是Set的一个重要实现类,称为哈希集
- HashSet中的元素无序并且不可重复
- HashSet中只允许一个Null 元素
- 有良好的存取和查找性能
- Iterator(迭代器)
- Iterator 接口可以以统一的方式对各种集合元素进行遍历
- hasNext()方法检测集合中是否还有下一个元素
- next()方法返回集合中的下一个元素
hashCode 与 equals 方法的用法
- hashCode()方法用于给对象返回hash code值,equals()方法用于判断其他对象与该对象是否相等。HashSet中是不允许添加重复元素的,当调用add()方法向HashSet中添加元素时,这就用到了hashCode()和equals()方法。在添加数据时,会调用hashCode()方法得到hash code值,通过这个值可以找到数据存储位置,在该区域存储的数据的hashCode值都是相等的。如果该区域已经有数据了,就继续调用equals()方法判断数据是否相等,如果相等就说明数据重复了,就不能再添加了。如果不相等,就找到一个位置进行存储。
- 这些是基于哈希算法完成的,它使得添加数据的效率得到了提升。假设此时Set集合中已经有100个元素,那么如果想添加第101个元素,如果此时没有使用哈希算法,就需要调用equals()方法将第101个元素与前100个元素依次进行比较,如果元素更多,比较所耗费的时间就越长。
- 如果两个对象相等,那么他们的hashCode值一定相等。反之,如果两个对象的hashCode值相等,那么这两个对象不一定相等,还需要使用equals()方法进行判断。
- 如果不重写hashCode()方法,默认每个对象的hashCode()值都不一样,所以该类的每个对象都不会相等。
Map
- Map中的数据是以键值对(key-value)的形式存储的
- Key-value 是以 entry 类型的对象实例存在的
- 可以通过key快速查到 value
- 一个映射不能包含重复的键
- 每个键最多只能有一个值
HashMap
-
基于哈希表的map接口实现
-
允许使用 null值和null键
-
key值不允许重复
-
HashMap 中的Entry 对象是无序排列的

)
在你开始做之前,别人给的任何建议都是屁。因为自己的心魔自己解,怕东怕西都是自找的。要学习就先得不要脸、抱对大腿,建立正确的心态。

浙公网安备 33010602011771号