集合
集合和数组的区别
-
集合:长度可变,只能存引用类型数据
-
数组:长度固定,可以存基本类型数据,也可以存引用类型数据
集合的体系
- 注意:有序和无序指的是存进去的顺序和取出来的顺序是否一致
集合方法:
- add(Object obj) 添加
- clear() 清空集合中的所有元素
- remove(Object obj) 删除指定元素
- contains(Object obj) 判断集合中是否包含obj对象,如果包含,返回true,否则返回false
- isEmpty() 判断集合中是否有数据,如果有返回false,否则返回true
- size() 获取集合中存储数据的个数
- toArray(T[] arr);把集合转换成指定类型的数组,集合中存什么类型就传入什么类型数组
迭代器
- 概念:集合统一取出数据的方式。这个类我们把他称之为Iterator
- 迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
- 注意事项:在迭代的过程中不要修改集合中的数据,否则可能会报并发修改错误ConcurrentModificationException
- foreach
格式 for(数据类型 变量名 : 集合或者数组){ }
泛型
什么时候用泛型
- 如果不确定使用什么类型的数据就使用泛型;
- 从概念上讲就是一个预定义数据类型
泛型的好处
- 将运行时期异常提前到编译时期,省去了强制类型转换的麻烦
泛型的使用
- 类:在类的声明后面加<泛型名1,泛型的名2,…>
- 方法:在方法上声明泛型必须声明在返回值类型前面,因为返回值类型也有可能用到这个泛型
- 和类上定义泛型一模一样
- 注意事项:一般情况泛型名都大写,并且是一个字母,字母的缩写一般是属性名的首字母
泛型通配符
- :不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。此时只能接受数据,不能往该集合中存储数据
public static void main(String[] args) {
Collection<Intger> list1 = new ArrayList<Integer>();
getElement(list1);
Collection<String> list2 = new ArrayList<String>();
getElement(list2);
}
public static void getElement(Collection<?> coll){//?代表可以接收任意类型
}
- 泛型的上限:
格式: 类型名称 <? extends 类 > 对象名称
意义: 只能接收该类型及其子类 - 泛型的下限:
格式: 类型名称 <? super 类 > 对象名称
意义: 只能接收该类型及其父类型
个人总结
4.19上午
Coll.toArray() 返回的是Object类型的数组,所以不常用
Coll.toArray(new T[0]),返回的是T类型的数组
迭代的时候不要修改集合中的数据
foreach 也可以遍历数组
实现了Interable接口的集合都可以使用foreach;
Foreach 不能使用索引查找指定位置的元素
4.19 下午
泛型:一般用属性的第一个字母的大写表示,多个泛型用逗号分隔
泛型声明在方法上,要放在返回值类型的前面只能在方法中使用
修饰符 <泛型> 返回值类型(泛型 变量)
泛型通配符只能用在方法参数里 <?>
泛型没有继承关系
泛型:左边限定右边