集合概念:
Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象
作用:
1、在类的内部,对数据进行组织;
2、简单而快速的搜索大数量的条目;
3、有的集合接口,提供了一系列有序的元素,并且可以在序列中间快速的进行插入或者删除元素;
4、有的集合接口,提供了映射关系,可以通过关键字(key)快速查找到对应的唯一对象,而这个关键字可以是任意类型
集合框架示意图:
Collection 接口:
1、是List、Queue、Set接口的父0接口:
2、定义了可用于操作List、Set和Queue的方法—–增删改查
List接口及实现类—-ArrayList
List:元素有序,并且可重复;
List可精确控制元素的插入位置,或者删除指定位置的元素;
ArrayList—数组序列,是List的重要实现类,它的底层是由数组实现的;
泛型集合中,不能添加泛型规定的类型及其子类型以外的对象,否则会报错。
泛型集合中的限定类型,不能使用基本类型,必须用基本类型的包装类。
Set接口及其实现类—-HashSet
Set:元素无序,并且不可重复
HashSet哈希集,是Set的重要实现类;
Map接口
Map提供了一种映射关系,元素是以键值对的形式存储(key-value)
根据key快速查找value
Map中的键值对以Entry类型的对象实例形式存在;
key值不能重复,value值可以重复;
key对value是多(一)对一的关系;
Map接口提供了返回key值集合、value值集合、Entry值集合,的方法;
Map支持泛型,形式如:Map <k,v>
HashMap类
HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现;
HashMap中的Entry对象是无序排列的;
Key值和value值都可以为null,但是一个HashMap只能有一个Key值为null的映射(Key值不可重复);
Collection
|—–List 有序(存储顺序和取出顺序一致),可重复
|----ArrayList ,线程不安全,底层使用数组实现,查询快,增删慢。效率高。
每次容量不足时,自增长度的一半,如下源码可知
int newCapacity = oldCapacity + (oldCapacity >> 1);
|----LinkedList , 线程不安全,底层使用链表实现,查询慢,增删快。效率高
|----Vector , 线程安全,底层使用数组实现,查询快,增删慢。效率低
每次容量不足时,默认自增长度的一倍(如果不指定增量的话),如下源码可知
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
|-----Set 元素唯一
一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。
|--HashSet 底层是由HashMap实现的,通过对象的hashCode方法与equals方法来保证插入元素的唯一性,无序(存储顺序和取出顺序不一致),。
|--LinkedHashSet 底层数据结构由哈希表和链表组成。哈希表保证元素的唯一性,链表保证元素有序。(存储和取出是一致)
|--TreeSet 基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行
集合与数组的区别:
1:长度限制之别
- 数组长度是固定不变的
- 集合的大小是可变的
2:可以存储的类型之别
- 一个数组存储的元素可以是基本类型,也可以是引用类型,且只能存储同一种类型的元素
- 一个集合存储的元素只能是引用类型,但集合可以存储不同类型的元素(但集合一般存储同一种类型)