集合
容器|集合:
存储多个数据
容量:
容量可以多少进行动态的变动
集合:
存储任意引用类型数据 集合的长度可变,可以根据需求动态的增删数据,长度随之改变
Collection (单一值) Map (键值对) / \ / \ List Set HashMap HashTable
ArrayList HashSet (无须的 不重复)
LinkedList (有序的 重复的)
Collection
容器中的数据层次结构:
Collection: 集合层次结构中的根节口。集合表示一组对象。称为元素 Collection:单个值得集合 遍历方式: foreach iterator迭代器 MAP:键值对的集合(KEY-VALVE)
使用迭代器:
1.获取迭代器的实例,用来遍历指定的集合
2.判断是否存在下一个数据
3.获取下一个数据
泛型
泛型:jdk1.5
参数化类型: 数据类型作为参数传递 只能配置引用数据类型 <>定义泛型 泛型的行为发现在编译期间,运行期间泛型配置的内容无效,泛型擦除4 要求先定义泛型,才能使用泛型 泛型类: 类型的后面定义泛型,在使用类型的时候可以通过泛型传递具体的类型,类中可以进行使用 泛型方法: 代码简单简洁 增强程序健壮性,避免类型转换异常的出现 增强稳定性和可读性
List
List:有序,可重复
Set: 无序,不可重复的|唯一的 List: 有序集合(序列)。该接口的用户可以精确控制列表中每个元素的插入位置。 新增: 一些列根据索引操作的方法(对于Collection) set: 无序,不可重复|唯一的 遍历方式 : for普通for循环 foreach 增强for循环 iterator迭代器
ArrayList
ArrayList:
有序,可重复的
ArrayList :
实现所有可选列表操作,并允许所有元素,包括null 。 底层结构:
数组 Object[] elementData;
特点:
根据索引查询遍历效率较高,增删效率低 应用场景:
适合应用在大量做查询,少量做增删的位置
扩容问题:
初始容量 :
默认初始容量为10 ,在第一次添加add的时候进行构建 private static final int DEFAULT_CAPACITY = 10;
扩容机制 :
每次扩容原容量的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1);
新增功能:
void forEach(Consumer<? super E> action)
遍历 :
普通for
增强for
iterator迭代器
listIterator迭代器
Vector :
底层结构 : 数组
特点 :
与ArrayList相同
区别:
1) Vector是同步的|线程安全 ArrayList不同步|线程不安全,相对效率较高
2) Vector每次扩容原容量的2倍 ArrayList每次扩容原容量的1.5倍,相对ArrayList更有利于节省内存
总结 : 如果不需要线程安全实现,建议使用ArrayList代替Vector
LinkedList
LinkedList:
实现所有可选列表操作,并允许所有元素(包括null )。
底层结构:
双向链表
特点:
查询效率低,增删效率高
应用场景:
单个数据值的集合中,允许数据有序,且可重复,在大量做增删,少量做查询的时候时候适合使用链表
新增功能:
新增了一些与链表头尾相关的方法
注意:
此与现实不同步
链表
链表分类:
单向链表 双向链表
单行链表:
记录链表头结点
双向链表;
记录链表头与链表为节点
链表结构中数据是有序的,可重复的,没有索引,但是可以模拟索引