集合概念
● 存储一个班学员信息,假定一个班容纳20名学员
● 当我们需要保存一组一样(类型相同)的元素的时候,我们应该使用一个容器 来存储,数组就是这样一个容器。
● 数组有什么缺点?
● 数组一旦定义,长度将不能再变化。
● 然而在我们的开发实践中,经常需要保存一些变长的数据集合,于是,我们需 要一些能够动态增长长度的容器来保存我们的数据。
● 而我们需要对数据的保存的逻辑可能各种各样,于是就有了各种各样的数据结 构。
Java中对于各种数据结构的实现,就是我们用到的集合
JavaAPI
集合体系概述 Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中
Collection 接口
● Collection 接口-定义了存取一组对象的方法,其子接口Set和List分别定义 了存储方式。
● Set 中的数据对象不可以重复。
● List 中的数据对象有顺序(添加顺序)且可以重复
List 接口及实现类
● List继承了Collection接口,有三个实现的类
1.- ArrayList 数组列表,数据采用数组方式存储。
可以保存重复元素,底层是数组实现,添加元素的类型可以是任意类型的.
虽然集合中默认是可以添加任意数据类型,但是后续处理时,会出现类型转换问题.
所以java中的集合类都支持自定义类型(泛型 把类型当做参数传递)
底层是一个数组,默认长度是10,当数组装满时,会自动扩容,扩容到原来的1.5倍
2.-LinkedList 链表
3.-Vector 数组列表,添加同步锁,线程安全的
ArrayList实现了长度可变的数组,在内存中分配连续的空间。 遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效率比较高
Arraylist常用方法:
arrayList1.add("a");//向末尾添加元素,会自动扩容
arrayList1.add(11, "x");//向指定的位置添加元素, 位置从0开始 到size(实际装入的元素个数)
arrayList1.remove("b");//根据元素的内容删除数据,只删除匹配的第一个元素
String s = arrayList1.remove(0);//删除并返回指定位置上的元素
System.out.println(s);
arrayList1.clear(); 清空集合
System.out.println(arrayList1.contains("x"));//是否包含指定的元素
System.out.println(arrayList1.get(3));获得指定位置上的元素(底层是数组,获取元素的速度是最快的)
System.out.println(arrayList1.indexOf("b"));
System.out.println(arrayList1.lastIndexOf("b"));
System.out.println(arrayList1.isEmpty()); 判断集合中的元素是否为空 为空--true 否则--false
arrayList1.set(1,"A");//替换指定位置的元素
System.out.println(arrayList1.size());//获得集合中实际元素的个数, 也可以说是集合的长度
LinkedList的常用方法
linkedList.add("d");//向链表末尾添加元素
linkedList.add(2,"x");//向指定的位置添加元素
System.out.println(linkedList.get(3));//从链表中获取指定位置的元素(从头或者从尾开始查找,效率低于ArrayList)
linkedList.remove();//删除并返回第一个节点内容
linkedList.removeLast(); //删除并返回最后一个元素
List接口集合迭代
Vector
数组实现
是多线程安全的