1.集合的体系结构
JDK在1.0版本中,提供了很少的集合容器,在升级到1.2版本后,为了更多的需求,出现了集合框架,有了更多的容器完成不同的需求
以每一个容器的数据结构不一样为容器的区分方式
不同的容器进行不断的向上抽取,最后形成了一个集合框架,这个框架就是
Collection
接口。在
Collection
接口定义着集合框架中最最共性的内容
2.什么是迭代
由于集合容器有很多,每个容器都有自身的数据存储结构,即每个容器自身最清楚自己中数据是
如何存储的,容器这么多,每个容器数据存储又不相同,这时就在它们之间找取出元素的共性进
行了抽取,抽取出集合容器取出元素的共同特点。
在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还
有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代
3.List
一个有序集合(序列),此接口的用户在列表中的每个元素都被插入的地方有精确的控制,用户可以通过他们的整数索引(也就是在列表中的位置)访问元素,并在列表中搜索元素,与 set 不同,列表通常允许重复元素
List 方法
void add(int index, E element) :在列表的指定位置插入指定元素(可选操作)boolean addAll(int index, Collection<? extends E> c) :将指定 collection 中的所有元素都插入到列表中的指定位置E get(int index) :返回列表中指定位置的元素int indexOf(Object o) :返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1int lastIndexOf(Object o) :返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1ListIterator listIterator() :返回此列表元素的列表迭代器(按适当顺序)E remove(int index) :移除列表中指定位置的元素(可选操作)E set(int index, E element) :用指定元素替换列表中指定位置的元素(可选操作)List subList(int fromIndex, int toIndex) :返回列表中指定的 fromIndex (包括 )和toIndex (不包括)之间的部分视图default void sort(Comparator<? super E> c) :分类列表使用提供的 Comparator比较元素
4.List实现类
List
接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括
null
在内的所有
元素
每个
ArrayList
实例都有一个
容量
。该容量是指用来存储列表元素的数组的大小。它总是至少
等于列表的大小。随着向
ArrayList
中不断添加元素,其容量也自动增长
此实现不是同步的
使用 Collection 接口方法
public class CollectionDemo() {
public static void main(String[] args) {
method();
}
public static void method() {
Collection<Integer> c1 = new ArrayList<>();
//添加指定元素
c1.add(1);
//把 c1 中的所有元素添加到 c2 中
Collection<Integer> c2 = new ArrayList<>();
c2.addAll(c1);
//判断指定元素是否在集合中,如果在返回true,否则返回false
boolean contains = c1.contains(2); // false
//判断指定集合是否在集合中,如果在返回true,否则返回false
boolean containsAll = c2.containsAll(c1); // true
//判断集合是否为空
boolean empty = c1.isEmpty();
//获取集合中的元素个数
int size = c1.size();
//删除集合中指定元素
c1.remove(1);
//删除集合中的所有元素
c1.removeAll();
//根据判断语句的结果来删除元素,若条件为真则执行删除,否则不执行删除
c1.removeIf(e -> e == 4);
//将集合转换为 Object 类型的数组
Object[] array = c1.toArray();
//将集合转换为指定类型的数组
Integer[] tem = c1.toArray(new Integer[c1.size()]);
}
}
使用 List 接口方法
public class ListDemo {
public static void main(String[] args) {
addMethod();
}
private static void addMethod() {
List<Integer> list = new ArrayList<>();
// 添加元素
list.add(1);
list.add(2);
//将指定元素添加到指定位置,注意这种方法性能较差,因为存在数据移动问题
list.add(0, 4);
//将指定集合中的所有元素添加到集合的指定位置,性能差
List<Integer> list1 = new ArrayList<>();
list1.add(20);
list.addAll(1, list1);
//修改方法:set( 下标 , 修改后的值 )
list1.set(0, 2);
// indexOf 方法是从前向后在集合中查询指定元素,如果找到返回元素所在下标,如果找不到返回 -1
int f = list.indexOf(2);
System.out.println(f);
f = list.indexOf(20);
// lastIndexOf 方法是从后向前找,在集合中查询指定元素,如果找到返回元素所在下标,如果找不到返回 -1
f = list.lastIndexOf(1);
//获取指定下标位置的元素
Integer num = list.get(0);
//删除指定下标位置的元素
Integer num2 = list.remove(0);
}
}