1、什么是集合:对象的容器,定义了对多个对象进行操作的方法。
2、数组和集合的区别:
数组的长度是固定的。集合长度不固定
数组可以存储基本类型和引用类型,集合只能存储引用类型数据。
3、Collection是体系的父接口,List和set是子接口。
4、List是有序,有下标,可以有重复数据的
Set是无序,无下标,不能有重复数据的
5、List有ArrayList、Vector、LinkedList这三种类型
ArrayList:数据结构实现,查询快,增删慢,运行效率快,线程不安全
LinkedList:链表结构实现,查询慢,增删快
6、ArrayList和LinkedList关于操作数据的方法
添加:add()
删除:remove()
清空:clear()
元素个数:size()
输出数据:toString()
判断是否包含某个元素:contains()
是否为空:isEmpty()
判断是否相等:equals()
遍历:方法一:增强for
方法二:普通for
方法三:迭代器
方法四:列表迭代器
7、ArrayList代码演示(LinkedList相同)
public class TestArrayList {
public static void main(String[] args) {
//创建集合
ArrayList students=new ArrayList();
Student s1=new Student("思凡", 18);
Student s2=new Student("铸玺", 19);
Student s3=new Student("淘淘", 17);
//1添加
students.add(s1);
students.add(s2);
students.add(s3);
//判断元素个数
System.out.println("元素个数:"+students.size());
//打印数据
System.out.println("打印元素:"+students.toString());
//2删除
students.remove(new Student("思凡", 18));
System.out.println("删除:"+students.size());
//3遍历
//3.1 增强for
for(Student s:studetns){
System.out.println(s.toString());
}
//3.2 for
for(int i=0;i<students.size();i++){
System.out.println(s.get(i));
}
//3.2 迭代器
Iterator it = students.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//3.4 列表迭代器
System.out.println("------从前往后--------")
ListIterator listIterator = students.listIterator();
while (listIterator.hasNext()){
System.out.println(listIterator.nextIndex()+"---"+listIterator.next());
}
System.out.println("------从后往前--------")
ListIterator lit=students.listIterator(students.size());
while(lit.hasPrevious()){
System.out.println(lit.previousIndex()+"---"+lit.previous());
}
//4判断
System.out.println(students.contains(s1));
//5获取位置
System.out.println(students.indexOf(s2));
}
}
8、ArrayList源码分析
源码分析:
- (1)调用无参构造方法创建ArrayList集合,长度是 size=0,elementData 存储元素的数组
- (2)当添加第一个元素时,容量扩充为10,每次扩容大小都是原来的1.5倍
- (3)remove方法使用System.arrayCopy实现移动,效率高
- (4)迭代器中有一个cursor,获取一个元素后,cursor+1,如果cursor==size,不能获取
9、LinkedList源码分析
源码分析: - (1)构造没有任何操作,属性size=0 元素个数, head 头节点 last 最后一个节点
- (2) 静态内部类 Node 属性 item:数据 next:下一个元素 prev:上一个元素
- (3) add方法中每添加都会形成一个节点,fist属性指向第一个元素,last指向最后一个元素,每个节点都有前驱和后继
10、ArrayList和LinkedList区别: - ArrayList的存储结构是数组,LinkedList存储结构式双向链表
- ArrayList的查找遍历比较快,插入和删除相对较慢,因为使用本地方法优化,并不一定比LinkedList慢
- LinkedList的插入和删除比较快,查找遍历较慢。