集合框架
一、集合概念
对象的容器,定义了对多个对象进行操作的常用方法。可以实现数组的功能
和数组的区别:
- 数组的长度固定,集合长度不固定
- 数组可以存储基本类型和引用类型,集合只能存储引用类型
位置在java.util.*;
## 二、Collection体系集合
- Collection是该体系结构的根接口,代表一组对象,称为“集合”。
- List接口的特点:有序,由下标,元素可重复
- Set接口的特点:无序,无下标,元素不能重复
Collection方法:
- boolean add (Object obj) //添加一个对象
- boolean addAll(Collection c) //将一个集合中的所有对象添加到此集合中
- void clear() //清空此集合中的所有对象
- boolean contains(Object o)//检查此集合中是否包含o对象
- boolean equals(Object o)//比较此集合是否与指定对象相等
- boolean isEmpty()//判断此集合是否为空
- boolean remove(Object o)//判断此集合是否移除o对象
- int size() //返回此集合中的元素个数
- Object[] toArray() //将此集合换成数组
List方法:
- void add(int index,Object o)//在index位置插入对象o
- boolean addAll(int index,Collection c)//将一个集合中的元素添加到此集合当中的index位置
- Object get(int index )// 返回集合中指定位置的元素
- List subList(int fromIndex,int toIndex)//返回fromIndex和toIndex之间的集合元素
### 1、List实现类
- ArrayList:
- 数组结构实现,查询快,增删慢
- JDK1.2版本,运行速率快、线程不安全
- Vector:
- 数组结构实现,查询快,增删慢
- JDK1.0版本,运行速率慢、线程安全
- LinkedList:
- 链表结构实现,增删快,查询
### 2、Set实现类
- HashSet【重点】:
- 基于HashCode计算元素存放的位置。
- 当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入
- TreeSet:
- 基于排列顺序实现元素不重复
- 实现了SortedSet接口对集合元素自动排序
- 元素对象的类型必须实现Comparable接口,指定排序规则
- 通过CompareTo方法确定是否为重复元素。
## 三、Map集合
Map接口的特点:
- 用于存储任意键值对(Key-Value)
- 键:无序、无下标、不允许重复(唯一的)
- 值:无序,无下标、允许重复
常用方法:
```java
1、V put(K key ,V value) 将对象存入到集合中,关联键值。key重复则覆盖原值。
2、Object get(Object key) 根据键获取对应的值
3、Set<K> 返回所有key
4、Collection<V> values() 返回包含所有值的Collection集合
5、Set<Map.Entry<K,V>> 键值匹配的Set集合
```
### 1、HashMap实现类
特点:线程不安全,运行效率快;允许null作为key或者是value
put方法:
```总结:
put V put(){
return putVal(hash(key),key,value,false,true)
}
```
总结
```
1、HashMap刚创建时,table是null,为了节省空间,当添加第一个元素时,table调整为16
2、当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容为原来的的2倍,目的是减少调整元素的个数
3、jdk1.8 当每个链表长度大于8,且元素个数大于64时,会调整红黑树,目的是为了提高效率
4、jdk1.8 当链表长度小于8时,调整成链表
5、jdk1.8以前 链表是头插入,jdk1.8以后,链表是尾插入。
```
### 2、Hashtable实现类
特点:线程安全,运行效率慢;不允许null作为key或者是value
### 3、Properties实现类
特点:Hashtable的子类,要求key和value都是String类型,通常用于配置文件的读取
### 4、TreeMap是实现类
实现了SortedMap接口,可以对key自动排序