*数组:只能存放一种数据类型,可以是基本数据类型也可以是引用数据类型
*集合:
增加删除元素效率高;
可以放入多种数据类型,只能放引用数据类型
(但我们一般就只使用泛型,让其只放一种类型)
集合的应用场景:
当需要将相同结构的个体整合到一起的时候,就考虑使用集合
*** Collection
List Set
Collection,List,Set都是接口,
List扩展了搜索引相关的方法
List,Set都是继承Collection接口
*接口不可以被实例化,可以实现底层实现类
Collection
*遍历方式
1.增强for循环
2.利用迭代器
Iterator it=new Iterator();
while(it.hasNext()){
sysout(it.next());
}
//这个遍历比上面好,在遍历结束时,it也将被释放
for(Iterator it=new Iterator();it.hasNext();)
sysout(it.next());
List
*遍历方式
1.增强for循环
2.利用迭代器
3.普通for循环
ArrayList与Vector的区别和联系:
联系:都是List接口的实现类,底层都是数组
区别:ArrayList扩容:1.5倍 Vector扩容:2倍
底层数组扩容数量不一样
ArrayList:JDK1.2 效率高 线程不安全
Vector:JDK1.0 效率低 线程安全
数组: 查询快 插入删除效率低
LinkedList:底层 双向链表
List接口:元素允许重复,以元素添加的顺序来放置元素,不会重新排列
ArrayList:数组形式存储,查询快
LinkList: 链表 插入和删除方便
Set接口:元素对象不能重复,其元素添加后不保证与添加的顺序一致
HashSet 散列表(主数组+链表) 快速定位元素,一般需要重写hashCode()方法
唯一无序 查找添加删除效率高
TreeSet 树 升序存储(二叉树中序) 访问检索速度快
LinkHashSet:有序唯一 按照添加顺序
Map接口:用于维护键值对的集合,键对象不允许重复。而一个值对象又可以是一个Map
HashMap: 散列表 唯一 不保证元素顺序 允许使用空值空键
TreeMap: 树 顺序存储键值对 允许快速检索 按照键升序排序 唯一有序
Map转换为Collection的三个方法:
1.entrySet():返回一个包含Map中元素的集合,每个元素都包括键和值
2.keySet():返回键的集合
3.values():返回值的集合
*LinkHashMap是HashMap的子类,保存了记录的插入顺序,遍历速度只和实际数
据有关,一般比HashMap速度慢。有序唯一
加入泛型作用:
限制放入集合中元素的类型,将类型限制为同一种类型
加入泛型,其实就是对编译期间的瞬间生效,在编译期间就不允
许在添加其它的类型了,泛型在jdk1.5之后出的
泛型的上限:? extends A:只要泛型A或者A的子类都可以传入
泛型的下线:? super A:只要泛型为A或者A的父类都可以传入
泛型的局限性:
1.不能被实例化
2.不能实例化泛型数组
3.基本类型是不能被对象存储
4.不能抛出也不能捕获泛型类的异常
5.不能在静态方法或者静态变量中引用类型参数
Iterator接口:为了对Collection进行迭代操作
散列表(主数组+链表):散列法优点:基本操作平均时间也保持不变
集合
最新推荐文章于 2023-12-14 10:51:51 发布