集合的概述和集合的继承体系
集合和数组的对比
1,数组的长度是不可变的,集合的长度是可变的。
2,数组可以存基本数据类型和引用数据类型。 集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类。
集合类体系结构
Collection集合
Collection 集合概述和使用
Collection集合概述
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现
创建Collection集合的对象
多态的方式
具体的实现类ArrayList
Collection 集合常用方法
方法名 | 说明 |
boolean add(E e) | 添加元素 |
boolean remove(Object o) | 从集合中移除指定的元素 |
boolean removeif(Object o) | 根据条件进行删除 |
void clear() | 清空集合 |
boolean contains(Object o) | 判断集合中是否存在指定的元素 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中元素的个数 |
Collection 集合的遍历
Iterator:迭代器,集合的专用遍历方式
Iterator iterator():返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引。
Iterator中的常用方法
boolean hasNext():判断当前位置是否有元素可以被取出
E next():获取当前位置的元素 将迭代器对象移向下一个索引位置
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("d");
collection.add("e");
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()){
String s = iterator.next();
System.out.println(s);
}
}
上述代码是向Collection集合中添加元素并使用迭代器对集合进行遍历。
迭代器小结
Iterator iterator():创建迭代器对象,默认指向当前集合的0索引。
boolean hasNext():判断当前位置是否有元素可以被取出
E next():获取当前位置的元素 将迭代器对象移向下一个索引位置
迭代器中删除的方法练习
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String s = iterator.next();
if ("b".equals(s)){
iterator.remove();
}
System.out.println(s);
}
}
增强for循环
增强for:简化数组和Collection集合的遍历,它是JDK5之后出现的,其内部原理是一个Iterator迭代器,实现Iterable接口的类才可以使用迭代器和增强for。
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
for (String s : list){
System.out.println(s);
}
}
List集合
List集合概述和特点
List集合概述
有序集合,这里的有序指的是存取顺序
用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素
与Set集合不同,列表通常允许重复的元素
List集合特点
有序:存储和取出的元素顺序一致
有索引:可以通过索引操作元素
可重复:存储的元素可以重复
List集合特有方法
方法名 | 说明 |
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
addMethod(list);
removeMethod(list);
getMethod(list);
}
public static void getMethod(ArrayList<String> list) {
String s = list.get(0);
System.out.println(s);
}
public static void addMethod(ArrayList<String> list) {
list.add(0,"aaa");
System.out.println(list);
}
public static void removeMethod(ArrayList<String> list) {
boolean flag = list.remove("a");
System.out.println(flag);
System.out.println(list);
}
ArrayList集合
数据结构
数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。例如栈、队列、数组、链表。
栈
栈是一种数据先进后出的模型。数据进入栈模型的过程称为:压/进栈;数据离开栈模型的过程称为:弹/出栈。
队列
队列是一种数据先进先出的模型。数据从后端进入队列模型的过程称为:入队列;数据从前端离开队列模型的过程称为:出队列。
数组
数组是一种查询快,增删慢的模型。查询数据通过地址值和索引定位,查询任意数据耗时相同,查询速度快;删除数据时,要将原始数据删除,同时后面每个数据前移,删除效率低;添加数据时,添加位置后的每个数据后移,再添加元素,添加效率极低。
链表
链表是一种增删快的模型(对比数组)链表是一种查询慢的模型(对比数组);
查询某个数据是否存在,必须从头(head)开始查询。
List集合常用实现类ArrayList
ArrayList:底层数据结构是数组,查询快,增删慢。
LinkedList集合
List集合常用实现类
List集合常用子类:ArrayList,LinkedList
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删快
LinkedList集合的特有功能
方法名 | 说明 |
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除并返回第一个元素 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
String firstStr = list.getFirst();
String lastStr = list.getLast();
System.out.println(firstStr);
System.out.println(lastStr);
}