为什么要使用集合?
- java是一门面向对象语言,为了便于存储和处理对象,就需要一个合适的容器,而缓冲区、数组等具有很大的局限性,所以集合(Collection)横空出世。
集合和数组有啥区别?
集合 | 数组 | |
---|---|---|
长度 | 长度可变 | 长度固定 |
存储的内容 | 可以存储不同类型的元素(一般不建议) | 存储的是同一种类型的元素 |
元素的数据类型 | 集合只能存储引用类型(即便存储基本类型,也会自动封装成包装类) | 可以存储基本数据类型,也可以存储引用类型 |
java集合框架
作用和本质
- 主要作用:存储对象的容器。
- 本质:用于存储对象的数据结构。
集合类型
- Java集合主要由2大致系构成,分别是
Collection
体系和Map
体系,其中Collection
和Map
分别是2大t体系中的顶层接口。 Collection
主要有三个子接口,分别为List(列表)
、Set(集合)
、Queue(队列)
。其中,List、Queue
中的元素有序可重复,而Set
中的元素无序不重复。Map
同属于java.util
包中,是集合的一部分,但与Collection
是相互独立的,没有任何关系。Map
中都是以key-value
的形式存在,其中key
必须唯一。Iterator
:迭代器,可以通过迭代器遍历集合中的数据。
迭代器(Iterator)介绍
- Collection继承自Iterable,而Iterable接口中存在iterator()方法,返回的是Iterator。
- Iterator也是一个接口,点开发现它有4个方法,其中forEachRemaining()方法为java8以后引入,这里不做讨论,主要是hasNext()、next()、remove()3个方法,它只提供了迭代的基本规则,具体由各个集合类通过内部类的方式进行实现:
Collection
List(列表)
:有序,可重复ArrayList
:底层数据结构为数组。具有查询快,增删慢,线程不安全,效率高等特点。Vector
: 底层数据结构为数组。具有查询快,增删慢,线程安全,效率低等特点。LinkedList
:底层数据结构为双向链表,具有查询慢,增删快,线程不安全,效率高等特点。
Set(集合)
:无序,唯一HashSet
:底层数据结构是哈希表(是一个元素为链表的数组) + 红黑树。TreeSet
:底层数据结构是红黑树(是一个自平衡的二叉树),保证元素的排序方式。LinkedHashSet
:底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成。
Map
Map
接口将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。Hashtable
:底层是哈希表
数据结构,线程是同步的,不可以存入null键,null值。效率较低,被HashMap 替代。HashMap
:底层是哈希表
数据结构,线程是不同步的,可以存入null键,null值。
要保证键的唯一性,需要覆盖hashCode方法,和equals方法。LinkedHashMap
:底层是哈希表+链表
数据结构。可以进行增删提高效率。TreeMap
:底层是二叉树
数据结构。可以对Map集合中的键进行排序。需要使用Comparable或者Comparator 进行比较排序。return 0,来判断键的唯一性。
为什么还要引入Map映射表这个集合结构?
- 作为学生来说,我们是根据学号来区分不同的学生。只要我们知道学号,就可以获取对应的学生信息。或者通过身份证号(key)证明你自己的身份(value)等等。这就是Map映射的作用,通过key可以唯一锁定value。