Collection集合
容器|集合 :
存储多个数据
数组 :
存储多个数据 , 一段连续的内存空间
数组的特点:
1.引用数据类型
2.定长,长度一旦确定不可改变
3.存储数据的类型相同
4.有序,有索引
集合的特点:
存储任意引用类型数据
集合的长度可变,可以根据需求动态的增删数据,长度随之改变
容器中的接口层次结构
Collection : 单个值的集合
Set 无序不可重复
List 有序可重复,有索引
Map : 键值对的集合(KEY-VALUE)
Collection 集合层次结构中的根接口。 集合表示一组对象,称为其元素 。
常用方法
遍历方式:
foreach
iterator迭代器
泛型: jdk1.5
参数化类型 : 数据类型作为参数传递, 只能配置引用数据类型
<>定义泛型
泛型的行为发生在编译期间,运行期间发型配置的所有内容无效,泛型擦除
要求先定义泛型,才能使用泛型
泛型类 : 类型的后面定义泛型,在使用类型的时候可以通过泛型传递具体的类型,类中可以进行使用
泛型方法
泛型的优点:
代码简单简洁
增强程序健壮性,避免类型转换异常的出现
增强稳定性与可读性
List : 有序,可重复
Set : 无序,不可重复|唯一的
List : 有序集合(也称为序列 )。 该接口的用户可以精确控制列表中每个元素的插入位置。
新增: 一些列根据索引操作的方法
遍历方式 :
for普通for循环
foreach 增强for循环
iterator迭代器
有序,可重复的
ArrayList :
实现所有可选列表操作,并允许所有元素,包括null 。
底层结构:
数组 Object[] elementData;
特点:
根据索引查询遍历效率较高,增删效率低
应用场景:
适合应用在大量做查询,少量做增删的位置
扩容问题:
初始容量 : 默认初始容量为10 ,在第一次添加add的时候进行构建 private static final int DEFAULT_CAPACITY = 10;
扩容机制 : 每次扩容原容量的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1);
新增功能:
void forEach(Consumer<? super E> action)
遍历 :
普通for
增强for
iterator迭代器
listIterator迭代器
Vector :
底层结构 : 数组
特点 : 与ArrayList相同
区别:
1) Vector是同步的|线程安全
ArrayList不同步|线程不安全,相对效率较高
2) Vector每次扩容原容量的2倍
ArrayList每次扩容原容量的1.5倍,相对ArrayList更有利于节省内存
总结 : 如果不需要线程安全实现,建议使用ArrayList代替Ve.1
定义一个ArrayList存储javabean类型的数据,测试使用
如果存储javabean类型的数据,在调用一些方法时候(indexOf..),默认调用equals方法进行判断,要求对javabean类型重写equals方法
LinkedList:
实现所有可选列表操作,并允许所有元素(包括null )。
底层结构:
双向链表
特点:
查询效率低,增删效率高
应用场景:
单个数据值的集合中,允许数据有序,且可重复,在大量做增删,销量做查询的时候时候适合使用链表
新增功能:
新增了一些与链表头尾相关的方法
注意:
请注意,此实现不同步。
定义链表结构,存储javabean类型的数据,测试使用,遍历使用
存储javabean类型数据时候,要求javabean类型重写equals方法,否则使用一些判断比较的方法时候回默认调用equals方法
Set :
无序,不可重复|去重
无序:
存放的顺序与内部真实存储的顺序不一致
去重:
集合不包含元素对e1和e2 ,使得e1.equals(e2)和最多一个null元素。
新增功能:
static Set of(E… elements) 返回包含任意数量元素的不可修改集。
遍历方式:
foreach
iterator迭代器
TreeSet :
底层结构 :
红黑树
特点 :
查询效率较高,自动把数据做升序排序
底层是由TreeMap维护的
新增功能: 新增了一些与比较大小相关的方法
遍历方式 :
foreach
iterator迭代器
注意 :
TreeSet需要存储相同类型的数据,因为会默认存在比较排序
TreeSet存储javabean类型的数据
去重与排序:
都是根据比较规则实现的,与equals没有关系
比较规则:
内部比较器|内部比较规则|自然排序 : 比较规则定义在javabean类型的内部
javabean类型实现Comparable接口,重写compareTo(T o)方法,在方法中定义比较规则
外部比较器|外部比较规则|定制排序 : 比较规则定义在javabean类型的外部
定义一个实现类,实现Comparator接口,重写int compare(T o1, T o2),在方法中定义比较规则
Arrays.sort(数组) 默认升序排序
static <T> void sort(T[] a, Comparator<? super T> c) 根据指定比较器引发的顺序对指定的对象数组进行排序。