一、集合
1.概念
集合和数组都是用来存储数据的容器,可以存储多个数据。首先数组的长度是固定的,集合的长度是可变的,而且数组是可以存储基本类型和引用类型的,但是集合只能存储引用类型,如果想存储基本类型,只能储存基本类型的封装类
2.集合的继承图
Collection 接口
|
|------------------------------------------------|
List Set
| |
-------------- -------------------
| | | |
ArrayList LinkedList HashSet LinkedHashSet
3.集合中通用的方法
1) objece [] toArray() //将集合中的元素,转成数组中的元素--集合转数组
2) 集合.size() //获取集合的长度
3)boolean contains(object obj) //判断对象obj是否存在于集合中
4)void clear(); //清空集合中的所有元素
5)boolean remove(object obj) //在集合中移除元素obj,成功移除返回true
二、迭代器
1.概念
java中集合有很多种,我们要取出这些集合中的元素,可通过一种通用的方式来获取,那就是迭代器。在取元素之前先要判断集合中还有没有元素, 如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
2.代码展示
/*
* Iterator
*/
public static void func13()
{
ArrayList <Integer>list = new ArrayList<Integer>();
list.add(11);
list.add(11);
list.add(13);
list.add(14);
Iterator<Integer> it = list.iterator();
while(it.hasNext())
{
int i = it.next();
System.out.println(i);
}
}
3.注意事项
1)存储时提升了Object。取出时要使用元素的特有内容,必须向下转型。
三、增强for
1.代码展示
/*
* 实现for循环,遍历数组
* 好处: 代码少了,方便对容器遍历
* 弊端: 没有索引,不能操作容器里面的元素
*/
public static void function(){
int[] arr = {3,1,9,0};
for(int i : arr){
System.out.println(i+1);
}
System.out.println(arr[0]);
}
四、泛型
1.使用格式
创建对象时,确定泛型的类型
ArrayList<Integer> list = new ArrayList<Integer>();
2.泛型的通配符?
/*
* 定义方法,可以同时迭代2个集合
* 参数: 怎么实现 , 不能写ArrayList,也不能写HashSet
* 参数: 或者共同实现的接口
* 泛型的通配,匹配所有的数据类型 ?
*/
public static void func15(Collection<?> coll){
Iterator<?> it = coll.iterator();
while(it.hasNext()){
//it.next()获取的对象,什么类型
System.out.println(it.next());
}
}
3.通配符的限定
/*
* 定义方法,可以同时遍历3集合,遍历三个集合的同时,可以调用工作方法 work
* ? 通配符,迭代器it.next()方法取出来的是Object类型,怎么调用work方法
* 强制转换: it.next()=Object o ==> Employee
* 方法参数: 控制,可以传递Employee对象,也可以传递Employee的子类的对象
* 泛型的限定 本案例,父类固定Employee,但是子类可以无限?
* ? extends Employee 限制的是父类, 上限限定, 可以传递Employee,传递他的子类对象
* ? super Employee 限制的是子类, 下限限定, 可以传递Employee,传递他的父类对象
*/
public static void iterator(ArrayList<? extends Employee> array){
Iterator<? extends Employee> it = array.iterator();
while(it.hasNext()){
//获取出的next() 数据类型,是什么Employee
Employee e = it.next();
e.work();
}
}
}