1.List与Set的区别
1.1List提供的方法
增
Void add(int index, Eelement)
作用:将元素添加到list指定的位置
参数:
Index:插入的位置
Element:添加的元素
Boolean addAll(int index,collection <E>c)
作用:将一个集合的数据添加到指定位置
参数:
Index:插入的位置
C:添加的集合
删
E remove(int index)
作用:删除指定位置的元素
参数:
Index:指定的位置
返回值:被删除的元素
改
E set(int index,E element)
作用:修改指定位置的元素
参数:
Index:修改的位置
Element:修改后的元素
返回值:
修改前该位置的元素
查
E get(int index)
作用:获取指定位置的元素
参数:
Index:指定的位置
返回值:
指定位置的元素
注意:取出该元素后,该元素依然在集合存在
Int indexof(Object o)
作用:查询元素在集合中的位置
参数:
o:查询的元素
返回值:
元素在集合中的位置
注意:如果查询的元素在集合中不存在返回-1
Int lastindexof(Object o)
作用:查询元素在集合中最后一次出现的的位置
参数:
o:查询的元素
返回值:
元素在集合中最后一次出现的位置
注意:如果查询的元素在集合中不存在返回-1
List<E> subList(int fromIndex,int toIndex)
作用:截取集合中一段元素
参数:
int fromIndex:开始位置
int toIndex:结束位置
返回值:
截取的元素集合
注意:
- 截取的元素包含开始位置,不包含结束位置
- 不会影响原集合的数据
2.常用子类
2.1ArrayList
数据结构:数组
特点:查询速度快,增删速度慢,线程不安全的
时间:jdk1.2
2.2LinkedList
数据结构:数组
特点:查询速度慢,增删速度快
时间:jdk1.2
2.3Vector
数据结构:数组
特点: 查询速度快,增删速度慢,线程安全的
时间:jdk1.0
注意:List的子类没有提供特有方法
3.Set
3.1 Set提供的方法
没有提供特有的方法,所有的方法都来自collection
特点:
无序,无下标,元素不可重复
3.2常用的子类
HashSet
数据结构:
1.8以前:数组+链表
1.8及以后:数组+红黑树
注意:
Hashset中数据前后顺序是根据存储的对象的hashcode值决定的
存储原理:
存储对象时,先调用对象的hashcode方法,获取对象的hashcode值,使用该hashcode值与集合中已经存储的对象的hashcode值进行比较,如果不相同,直接存储(在红黑树的结构中),如果有相同,在调用equals方法与相同的对象进行比较,如果不相同,存储到集合中(在数组中存储),如果equals方法结果为true表示相同,hashset集合会认为两个对象相同,不在存储第二个对象.
LinkedHashset
数据结构:
1.8以前:数组+链表+链表
1.8及以后:数组+红黑树+链表
注意:LinkedHashset多出的链表是用来记录数据的存储顺序,;所以LinkedHashset是有序的
TreeSet
数据结构:红黑树
注意:
Treeset存储数据时要么数据拥有比较性,要么创建Treeset时指定比较器,让数据拥有比较性
就是让存储的数据所属的类实现Comparable接口
注意:实现comparteble方法就要重写compartorTo方法
指定比较器
在创建Treeset集合时,传入实现了compartor的接口对象
4.数据结构
栈:先进后出
队列:先进先出
数组:
特点:
在内存中连续开辟一片空间,所以在寻找数组中所有数据计算机遍历一次内存即可,所以查询速度快
但是因为所有数据在同一片区域,此时如果给其中插入或删除一个数据,那么后面的数据位置都将需要修改,所以增删速度慢
链表:
单链表
特点:前一个数据中存储下一个数据的位置
双链表
特点: 前一个数据中存储上一个与下一个数据的位置
红黑树:二叉树