集合:
表示一组被称为其元素的对象. 这个对象中存放着多个相同类型的元素. 不同类型的集合有不同的特点,比如:有些集合允许重复元素,而有的则不行; 又有的是有序的,而有的则无序。在java 中,集合分为Collection 集合和Map ,集合两大类.所有集合都直接或者间接通过实现Collection 或者Map 来实现集合特征.
Collection集合接口
package java.util
public interface Collection<E> extends Iterable<E>
Map 集合接口
package java.util
public interface Map<K,V>
Collection : 单列集合:
继承了interface java.lang.Iterable 接口,此接口提供了迭代器功能,能够通过hasNext(), next(), remove() 方法来实现向后遍历,以及删除功能.
子接口 List & Set
Collection <== List <== ArrayList Vector LinkedList
有序可重复集合:
实现List 常见的数据结构:
1. 栈 特点:先进后出,
2. 队列 特点:先进先出
3. 链表,特点:增删快,查询慢. 底层实现原理: 可以在两端(双向/单向链表) 实现增删功能,但是查询需要遍历链表的每一个元素
4. 数组,特点:增删慢,查询快. 底层增删实现原理为: 数组copy 与添加, 关键点为底层数组长度是否满足要求.,通过索引查询.
实现类:
ArrayList: 底层数据结构为:数组, 特点: 查询快,增删慢, 线程不安全,效率高
Vector: 底层数据结构: 数组,特点: 查询快,增删慢,线程安全,效率低下 由于效率低下(不推荐使用)
LinkedList: 底层数据结构: 链表,特点: 增删快,查询慢, 线程不安全. 对于需要频繁增删而查询需求不高的可以用此集合
Collection <== Set <== HashSet TreeSet LinkedHashSet
无序唯一集合, 集合中的元素添加和取出时的顺序不一致, (LinkedHashSet 例外) 不能有重复元素存在, 元素重复的判定依据:根据hashCode 和 equals 方法判定..
HashSet : 底层数据结构:Hash表, 不排序,唯一
判定两个元素是否为重复元素
执行顺序: 首先比较哈希值是否相同
相同:继续执行equals()方法
返回true:元素重复了,不添加
返回false:直接把元素添加到集合
不同:就直接把元素添加到集合
TreeSet: 底层数据结构: 红黑树(自平衡二叉树) 排序,唯一
保证元素的排序方式
a:自然排序(元素具备比较性) ==> 让元素所属的类实现Comparable接口 compareTo()方法
b:比较器排序(集合具备比较性) ==> 让集合构造方法接收Comparator的实现类对象 compare()方法 匿名内部类实现
Collections : 单列集合工具类, 定义了对部分单列集合诸如排序,查找,反转等操作的集合工具
常见的几个方法:
public static <T> void sort(List<T> list); // 排序
public static <T> int binarySearch(List<?> list,T key) ; // 二分查找
public static <T> T max(Collection<?> coll); // 最大值元素
public static void reverse(List<?> list); // 集合反转
public static void shuffle(List<?> list); // 重新打乱集合
Collection和Collections的区别
A:Collection 是单列集合的顶层接口,有两个子接口List和Set , map是双列集合很多用于集合嵌套
B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等
Map 双列集合:
与Collection单列集合对应的, Map<K,V> 为双列集合, 即是集合中的元素以键值对的方式来储存,并对键进行约束,多个键可以对应同一个值.
Map 体系:
|--HashMap 底层为hash表结构的集合, 键是无序的,不重复,线程不安全,速度快
|--LinkedHashMap 可预知顺序的集合,底层为针对键排序的链表集合, 键是有序的,不重复,线程不安全,速度慢
|--Hashtable 底层为hash表结构的集合 键无序,不重复,线程安全,速度慢
|--TreeMap 底层为针对键进行二叉树排序的集合, 键有序,不重复
HashMap
底层为哈希表的双列集合。对键进行无序唯一约束,放入相同键时,新的值会将旧的值覆盖。是最常用的Map集合。
特点
-线程不安全, 速度快, 允许存放null键,null值
Hashtable
底层为哈希表的集合,已被HashMap替代。Hashtable的Properties用于配置文件的定义和操作,键和值都是字符串,是集合中可以和IO技术相结合的对象
特点,
线程安全, 速度慢, 不允许存放null键,null值, 命名方式不符合标准大驼峰式
TreeMap
对键进行排序,排序原理与TreeSet相同的Map集合。排序方式同TreeSet, 使键实现Comparable接口,重写compareTo方法.创建集合对象时,传入Comparator对象,重写compare方法