Collection集合02
各个集合主要作用说明:
List:
ArrayList:查询
LinkedList:修改
Vector:古老的ArrayList
Set:
HashSet:剔重
LinkedHashSet:有序的HashSet
TreeSet:排序
List(有序,有下标,数据可重复)
list提供的方法
//增
add(int index, <E> element);
/*
* 作用:将元素插入到集合指定位置
* 参数:
* index : 添加位置
* element:要添加的元素
*/
addAll(int index, Collection c);
/*
* 作用:将集合插入到当前集合集合指定位置
* 参数:
* index:添加位置
* c :要添加的元素
*/
//删
remove(int index);
/*
* 作用:将集合中指定位置元素删除
* 参数:
* index:删除的指定位置
* 返回值:被删除的数据
*/
//改
set(int index, <E> element);
/*
* 作用:修改集合指定位置元素
* 参数:
* index : 要修改的位置
* element:修改后的元素
* 返回值:被修改的元素
*/
//查
get(int index);
/*
* 作用:获取集合指定位置元素
* 参数:
* index : 要获取的指定位置
* 返回值:获取的元素,原来集合不变
*/
indexOf(Object o);
/*
* 作用:获取元素在集合中的位置
* 参数:
* index : 要查询元素
* 返回值:元素在集合中的位置,若元素在集合中不存在返回-1;
*
*/
lastIndexOf(Object o);
/*
* 作用:获取元素在集合中最后一次出现的位置
* 参数:
* index : 要查询元素
* 返回值:元素在集合中的位置,若元素在集合中不存在返回-1;
*
*/
subList(int fromIndex, int toIndex)
/*
* 作用:截取集合中一段元素
* 参数:
* fromIndex : 截取开始位置
* toIndex: 截取结束位置
* 返回值:截取的集合,前面包含,后面不包含,原集合不变;
*
*/
ArrayList(查询快,增删慢,线程不安全,jdk1.2)<数组>
LinkedList(查询慢,增删块,jdk1.2)<链表>
Vector(查询快,增删慢,线程安全,jdk1.0)<数组>
ArrayList:
数据结构:数组结构
特点:查询快,增删慢
原因:
1.在内存中连续开辟一片空间,所以在寻找数组中所有数据计算机一次遍历内存即可.所以查询速度快
2.但是因为所以数据在同一片区域,此时如果给其中插入或删除一个数据,那么后面的数据位置都将需要修改.所以增删速度慢.
出现时间:jdk1.2
LinkedList:
数据结构:链表结构
特点:查询慢,增删块
出现时间jdk1.2
Voctor
数据结构:数组结构
特点:查询快,增删慢,线程安全;
出现时间:jdk1.0
注意:
List的子类没有提供特有方法;
Set(无序,无下标,数据不可重复)
set:
Set自身没有特有方法
都是来自collection提供的方法
存储原理:
1.存储对象时,先调用对象的hashCode方法,获取hashCode值
2.使用该hashCode值与集合中已经存储的对象的hashCode值进行比较
不相同:直接存储(存储到二叉树中)
3.不相同:调用该对象equals的方法已经存储的对象进行比较
false/不相同:存储到数组中.
true/相同:那么hashSet集合认为两个对象相同,去重;
HashSet()<数组+二叉树>
LinkedHashSet<数组+链表+二叉树>
TreeSet<二叉树>
HashSet
jdk1.8以前:存储方法:数组+链表
jdk1.8以后:存储方法:数组+二叉树
存储数据前后顺序是用hashCode的值来决定的.
存储原理:
1.存储对象时,先调用对象的hashCode方法,获取hashCode值
2.使用该hashCode值与集合中已经存储的对象的hashCode值进行比较
不相同:直接存储(存储到二叉树中)
3.不相同:调用该对象equals的方法已经存储的对象进行比较
false/不相同:存储到数组中.
true/相同:那么hashSet集合认为两个对象相同,去重;
LinkedHashSet
1.8以前:数组+链表
1.8以后:数组+链表+二叉树
注意:
LinkedHashSet是有序的(比HashSet多了一条链表,来记录存储顺序)
TreeSet
数据结构 : 二叉树
注意:
要么TreeSet存储数据时要么让数据具有比较性,要么在创建TreeSet时让数据指定比较器 1.让数据具有比较性:
方法:
就是让存储数据所属的类实现comparable接口,重写方法重写compareTo()方法;
(要实现Comparable接口时,就是要重写compareTo()方法)
2.指定比较器:
方法:
在创建TreeSet集合时,传入实现了Compartor接口的对象;
常用匿名内部内实现;
注意:
1.八大基本数据类型的包装类和String都已经实现了implements了Comparable接口,重写了compareTo()方法,不需要我们在去实现了