集合
目标
1、数组和集合
2、集合框架
3、Collection集合
4、List集合
1、数组和集合
共同点:都是用来存放数据的容器;
(1)数组的特点
缺点:数组的长度是固定的
每个元素都可以是一个字符
(2)集合的特点
集合的长度可以改变,可以增加和删除元素。
每个元素都是引用数据类型(基本数据类型可以转换为包装类对象)。
2、集合框架
(1)集合分类
Collection和Map
Collection:list和set集合
集合api在java.util包下
3、Collection集合
(1)Collection接口
(2)不能实例化
(3)抽象方法
int size() 返回此集合中的元素数。 boolean add(E e) 确保此集合包含指定的元素(可选操作)。
boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作)。 void clear()
从此集合中删除所有元素(可选操作)。 boolean isEmpty() 如果此集合不包含元素,则返回 true 。
boolean contains(Object o) 如果此集合包含指定的元素,则返回 true 。
Iterator iterator() 返回此集合中的元素的迭代器。
4、list集合
(1)List集合
(2)继承了Collection接口
(3)不能实例化
(4)抽象方法:继承了Collection接口的抽象方法
(5)特点:有序的集合,可以存储重复的元素。
扩展的方法
E get(int index) 返回此列表中指定位置的元素。
E set(int index, E element) 用指定的元素(可选操作)替换此列表中指定位置的元素。
E remove(int index) 删除该列表中指定位置的元素(可选操作)。
int indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
int lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
List subList(int fromIndex, int toIndex) 返回此列表中指定的 fromIndex (含)和toIndex之间的视图。
5、常用的实现类
ArrayList、Vecto、Linkdelist
区别:
ArrayList和Vector,采用的是数字结构存储数据,查询和修改速度快,删除和插入比较慢。
LinkedList,采用的是链表结构存储数据,查询和修改速度慢,删除和插入比较快。
ArrayList是线程不安全,速度快。Vector是线程安全的,速度慢
6、ArrayList
ArrayList的使用
// 创建一个集合对象
ArrayList list=new ArrayList();
// 获取集合的元素个数,即长度。
System.out.println(list.size());
// 判断是否是集合
System.out.println(list.isEmpty());
// 添加元素
list.add(97);
list.add(94);
list.add(93);
list.add(90);
list.add(94);
list.add(94);
// 获取集合的元素个数,即长度。
System.out.println(list.size());
// 判断是否是集合
System.out.println(list.isEmpty());
// 删除元素
// list.remove(4);//根据下标删除
list.remove(new Integer(94));//根据元素删除
// 获取集合的元素个数,即长度。
System.out.println(list.size());
// 清空集合
// list.clear();
// 获取集合的元素个数,即长度。
// System.out.println(list.size());
// 是否包含指定的元素
boolean bl=list.contains(95);
System.out.println(bl);
// 获取指定的元素
Object o1=list.get(1);
System.out.println(o1);
// 修改指定的元素
list.set(1, 100);
Object o11=list.get(1);
System.out.println(o11);
// 获取指定元素第一次出现的下标
int index1=list.indexOf(94);
System.out.println(index1);
// 获取指定元素最后一次出现的下标
int index2=list.lastIndexOf(94);
System.out.println(index2);
// 截取子集合
List list2=list.subList(1, 4);
System.out.println(list2.size());
List集合的遍历:4种方式
// List集合遍历:4种方式
List list=new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("aa");
list.add("dd");
System.out.println(list.size());
// 方式1:for i
// for (int i = 0; i < list.size(); i++) {
// Object e=list.get(i);
// System.out.println(e);
// }
// 方式2:增强for
// for(Object e:list) {
// System.out.println(e);
// }
// 方式3:迭代器
// 通过集合对象获取对应的迭代器
Iterator it=list.iterator();
// 通过迭代器遍历集合
// 判断是否有下一个
// while(it.hasNext()) {
取出下一个
// Object e=it.next();
// System.out.println(e);
// }
// 方式4:forEach,jdk1.8开始支持的新语法,箭头函数
int a=10;
list.forEach((e)->{
System.out.println(e);
int c=a;
System.out.println(c);
c=18;
});
// a=18;