集合(容器)
集合
● 集合概念
数组:同一数据类型,创建之初必须给予长度,后面长度不能改变
实际运行中 ,数据的数量是不断变化的,需要一些能够自己调整长度的一些容器.
1.数据长度可变
2.数组的保存方式不同,数组(查询最快),链表(查询慢,删除添加元素块),树,有些可以重复,有的不能重复
单列集合:数组就是单列的,存储一个值进去
Collection 接口 定义了单列集合中共有的功能
List:可以存储重复元素,就可以在Collection的基础上添加自己特有的方法(通过索引操作的方法
ArrayList::底层实现是数组
Linklist::底层实现是链表结构
Vector::底层实现也是数组,是线程安全的
Set:不可以存储重复元素
HashSet::底层使用哈希表
TreeSet ::底层使用树结构
双列集合 : 键 : 值
Map(是一种映射)
HashMap
Hashtable
TreeMap
● 集合 API
集合体系概述
Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。
● Collection 接口
定义了存取一组对象的方法,其子接口Set和List分别定义
了存储方式。
Set 中的数据对象没有顺序且不可以重复。
List 中的数据对象有顺序且可以重复。
● List 接口及实现类
Java中的集合类中默认可以存储任意数据类型的,提供泛型机制,在定义时,最好为集合类提供一个明确的类型<指定的数据类型>
List继承了Collection接口,有三个实现的类
ArrayList::底层实现是数组,提供一系列对数组操作的方法
ArrayList();在第一次添加元素时创建底层数组,容量默认为10
ArrayList(10);在创建ArrayList对象时,就会创建底层数组,容量为指定容量,为10.
add()向末尾添加元素,数组添加满了,自动扩容,扩容为原来的1.5倍;add(0,100)向指定位置添加元素
clear();清空集合内容
contains();是否包含指定元素
get(3);返回指定位置的元素
indexOf(20);返回元素首次出现的位置
isEmpty();是否为空
remove(10);根据索引删除
remove((Object)10)根据元素内容删除
size();实际存储元素的个数
Linklist::底层实现是链表结构,无链表容量一说
LinkedList::底层实现是双向链表,一个一个的Node对象(data next(指针)prev(指针)),与ArrayList方法名相同,但底层实现都不同.Linkedlist中,还提供了一些用于象队列,栈结构的操作方法
Vector : : 底层实现也是数组,添加同步锁,是线程安全的
● List接口集合迭代
for循环遍历:
for(int i = 0;i<list.size();i++){
System.out.println(list.get(i));
}
增强for循环的遍历:
for(String s :list){
System.out.println(s);
}
增强for循环遍历元素的过程中不允许删除元素
迭代器的遍历(Iterator):
list.iterator();
ListIterator只能迭代List
● Set 接口
实现类共同的特征:不能存储重复元素
HashSet:无序的(值的哈希码%数组长度)
TreeSet:有序的(排序的)
底层使用树结构
● Set 接口集合迭代
遍历方式
增强for循环
迭代器遍历
● Map 接口
Map 双列接口
键 值
共同特征:将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
键不可以重复,值可以重复.
HashMap
键是无序的,允许出现一个为null的key(键)
V put(K key,V value)
V remove(Object key)
void clear()
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
int size()
V get(Object key)
Collection values()
Set keySet()
Set<Map.Entry<K,V>> entrySet()
HashTable
不允许出现一个为null的key(键),为null的值.
是线程安全的
TreeMap
键可以排序
Map的遍历方式:
entrySet();返回的是一个Entry对象的集合,一个Entry对象中存储了一组键值对
● Collections工具类
collection和collections的区别:
collection是单列集合的接口,collections类似于Arrays对数组操作的工具类,是对集合操作的工具类.
int …b可变长度的参数,本质是数组,一个参数列表中只能出现一个可变长度的参数,可变长度的参数必须放在参数列表的末尾