集合
集合的特点:
1.集合能够对数据进行增加删除修改查询的操作
2.集合能够存储引用类型,如果是基本类型可以是包装类类型
3.集合的长度是可变的
--------------------数据结构------------------------
4.部分集合是有序的,部分集合是无序的 (这里的有序指的是存储有序,并不是排序)
5.部分集合是唯一的,部分集合是可重复 (11, 22 ,33, 33, 22)
6.部分集合是可排序的,部分集合是不可排序的 33 44 55 11 -> 11 33 44 55
7.部分集合是线程安全的,部分集合是线程不安全 (synchronized)
集合应该设计成一个类,还是一个框架?
集合框架应该设计成一个接口,不同的集合的实现不一样,那么效率不一样,
特点不一样,我们可以自由选取
数据结构: 数据的存储方式。
常见的和集合相关的数据结构: 数组,栈,队列,链表,哈希表,二叉树
存储方式不一样决定了该集合的性能效率不一样
集合如果方便应该有以下功能:
1.增加功能
boolean add(E e)
boolean addAll(Collection<? extends E> c)
2.删除功能
void clear()
boolean remove(Object o)
boolean removeAll(Collection<?> c)
3.修改功能
4.查询功能
Iterator iterator()
Object[] toArray()
<T> T[] toArray(T[] a)
5.获取功能
int size()
6.判断功能
boolean contains(Object o)
boolean containsAll(Collection<?> c)
boolean isEmpty()
7.其他功能
boolean retainAll(Collection<?> c)
返回原集合是否发生改变
改变了返回true
没改变返回false
并发修改异常
java.util.ConcurrentModificationException
异常名称: 并发修改异常
产生原因: 表示在使用迭代器的同时,使用原集合修改了元素
解决办法:
1.只操作原集合
toArray
普通for
2.只操作迭代器
使用ListIterator
注意:
foreach遍历集合底层也是使用了迭代器不能够解决并发修改异常
集合的遍历功能
4.查询功能
Iterator<E> iterator()
Object[] toArray()
泛型
泛型的由来:
1.泛型模仿了数组: 在编译时期就确定类型,不存在对所有的子类判断的问题
2.泛型模仿了方法:泛型是一种类似于方法的参数化类型
概念
泛型是JDK1.5之后引入的新特性,是一种将元素的类型提前在编译时期确定,并且它是一种参数化类型的技术
格式
- <>里面可以是任意的字母,一般泛型类会使用E,泛型方法会使用T
- 这里只能够定义引用类型,不能够定义基本书类型
- <>里面既可以定义一个泛型,也可以定义多个泛型
泛型的好处
- 简化了代码
- 取消了黄色警告线
- 取消了强制类型转换,提高了程序的效率
- 提高了程序的安全性
- 提高了程序的扩展性和可维护性,满足了开闭元祖【对扩展开放,对修改关闭】
泛型类
泛型类: 把泛型定义在类上。
泛型接口
概念:把泛型定义在接口
泛型接口的使用方式有如下三种:
1.实现类确定泛型类型
2.实现类不确定泛型,在调用的时候确定泛型
3.匿名内部类确定泛型类型
泛型方法
概念: 把泛型定义在方法上,泛型方法又可以理解为局部泛型。
泛型方法的特点:
-
泛型方法独立于泛型类或者泛型接口
-
泛型方法在方法调用的时候确定类型
-
一个泛型接口或者泛型类中可以有多个泛型方法
-
一个泛型方法也可以定义多个泛型
注:泛型方法在写框架的时候应用非常广泛,所以我们有必要掌握它。