集合Collection
1.什么是集合
存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。
集合的出现就是为了持有对象。集合中可以存储任意类型的对象,而且长度可变。在程序中有可能无法预先知道需要多少个对象,那么用数组来装对象的话,长度不好定义,而集合解决了这样的问题。
2.集合和数组的区别
数组和集合类都是容器
数组长度是固定的,集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象数组中存储数据类型是单一的,集合中可以存储任意类型的对象。
集合类的特点
用于存储对象,长度是可变的,可以存储不同类型的对象。
数组的缺点
存储类型单一的数据容器,操作复杂(数组一旦声明好不可变)
3.集合的分类
集合做什么
1:将对象添加到集合
2:从集合中删除对象
3: 从集合中查找一个对象
4:从集合中修改一个对象就是增删改查
注意:集合和数组中存放的都是对象的引用而非对象本身
---|Collection接口: 单列集合
---|List接口: 有存储顺序, 可重复
---|ArrayList类: 数组实现, 查找快, 增删慢
在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快
---|LinkedList类: 链表实现, 增删快, 查找慢
由于链表实现, 增加时只要让前一个元素记住自己就可以,
删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素,
这样的增删效率较高但查询时需要一个一个的遍历, 所以效率较低
---|Vector类: 和ArrayList原理相同, 但线程安全, 效率略低
和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低
---|Set接口: 无存储顺序, 不可重复
---|HashSet 类
---|TreeSet 类
---|LinkedHashSet 类
---| Map接口: 键值对
---|HashMap 类
---|TreeMap 类
---|HashTable 类
---|LinkedHashMap 类
4、ArrayList
扩容原理:将原来的数组复制到更大的数组中(大小为原来的1.5倍),然后将新数据放到扩容后数组中。
ArrayList list=new ArrayList(); 这种是默认创建大小为10的数组,每次扩容大小为1.5倍
ArrayList list=new ArrayList(30); 这种是指定数组大小的创建,创建时直接分配其大小,没有扩充
HashMap
默认容量为16
默认装载因子为0.75
"链表散列"的数据结构(数组和链表的结合体),允许null值与null链。
底层是一个数组结构,数组中的每一项又是一个链表