黑马程序员——集合
1集合概述
集合其实就是一个可以存放任意对象的一个容器,相比较数组来说,数组存放的数据类型是固定的,长度是固定的,而集合可存放任意类型数据,集合存放的都是引用类型的对象,而数组,你可以定义为引用类型数组,存放对象,也可定义基本类型数组。其实集合之所以能存放基本类型数据,主要是因为jdk1.5版本的自动拆箱和装箱的功能,把基本类型数据转成引用类型数据2单列集合体系结构及特点:
Collection
|__List::元素是有序的,存取的顺序一致.。因为该集合体系有索引。
| 注意:判断集合是否包含某个元素,以及删除某个元素,依靠的都是元素的equals()方法。
| |__ArrayList:底层使用的数据结构是数组结构。线程不同步
| |___LinkList:底层使用的数据结构是链表结构
| |__Vector:底层使用的数据结构是数组结构。线程同步
|
|—Set:元素是无须的(存入和取出的顺序不一致),元素不可重复。
| 并且Set集合的功能和Collection接口的功能是一致的
|__Hashset:底层的数据结构是哈希表。
| HashSet保证数据唯一性的原理:判断元素的hashCode值是否相同,,如果相同还会继续比较对象的
| equals()方法,是否为True
|__TreeSet::底层使用的数据结构是二叉树。可以对Set集合中的元素进行排序。
| TreeSet保证数据唯一性的原理是:根据元素的CompareTo方法,是否返回0;
TreeSet的两种排序方式:
(1)让元素自身具备比较性,元素需要实现Comparab 接口 ,覆盖 CompareTo方法,这种方式也 称元素的自然顺序。
(2) 当元素不具备比较性时,或具备的比较性不是我们所 需要时需要让集合具备 较性,在集合初始化时,就有了比较方式,即在构造函数 中定义一个比较器,将比较器对象作为参数传递给TreeSet集合中的构造函数 中。当两种排序都存在时,以比较器为主。
注意:
ArrayList判断元素是否存在,还有删除元素依赖的是元素的equals()方法,HashSet判断集合中是否包含某个元素,及删除 某个元素依赖的是hashCode()和equals()方法, TreeSet判断元素是否存在,还有删除元素依赖的是元素的compare()方法
3双列集合体系及特点:
Map
|_HashTable:底层是哈希表数据结构,不可以存入null键和null值,线程同步的。
|
|_HashMap:底层用的也是哈希表数据结构,允许使用null键和null值,线程不同步的,效率高,替代了 HashTable
|
|_TreeMap:底层是二叉树数据结构,线程不同步。可用于给Map集合中的键进行排序。
HashMap底层用的是hash表,所以他保证键唯一性的原理,主要依靠的就是hashcod()和equels()方法,跟HashSet有点类似;TreeMap采用的树状结构,所以他保证键唯一性的原理是依靠对象的比较性,如果对象没有比较性,就会报错,如果你添加的这个数据的键跟集合中的键有重复的,那么后面的会覆盖前面的,特别注意他的返回值是被覆盖的键的值。