一、集合和数组的区别?
1.数组长度固定,集合长度可变
2.集合存储的都是对象,
ArrayList<Integer>
Java Integer(-128~127)值的==和equals比较产生的思考
对于下图,如果Integer的值在(-128~127)则用==和equals比较的话,效果是一样的,但是不建议包装类型用==(地址值的比较)
二、集合框架
Collection接口中的方法(底下的接口/实现类都可以使用)
共性的方法:
public boolean add(E e): 把给定的对象添加到当前集合中 。
public void clear() :清空集合中所有的元素。
public boolean remove(E e): 把给定的对象在当前集合中删除。
public boolean contains(E e): 判断当前集合中是否包含给定的对象。
public boolean isEmpty(): 判断当前集合是否为空。
public int size(): 返回集合中元素的个数。
public Object[] toArray(): 把集合中的元素,存储到数组中。
三、迭代器(Iterator 接口)(主要是遍历没有索引的集合)
通过集合的iterator()方法来获取迭代器
Iterator<E>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型
迭代器中注意两个方法
1.hasNext() ------>判断集合中是否还有下一个元素
2.next() -------->获取集合中的元素
四、增强for循环(foreach循环)作用:主要用于遍历没有索引的集合,但是普通for不可以遍历没有索引的集合
底层使用的也是迭代器,使用增强for循环的格式,简化了迭代器的书写
格式:
小练习(基础练习)
//创建Collection:
// 存储 "黄蓉","王语嫣","王语嫣","岳琳珊","东方不败";
//删除所有的王语嫣;
while (collection.contains("王语嫣")){
collection.remove("王语嫣");//这只能删除第一次出现的元素,所以循环删除
}
五、泛型
1.泛型概念:未知的类型
2.泛型可以定义的位置:
1.接口;
格式?
public interface 接口名 <泛型>{
//代码
}
2.类;
格式?
public class 类名<泛型的名称>{
//使用泛型
}
3.方法;
格式?
修饰符 <泛型> 返回值类型 方法名(参数列表){
//方法体
}
注意:方法上定义的泛型,它的作用域只是在本方法中
3.什么时候定义泛型呢?
当我定义接口、类或者方法的时候,如果要用一个数据类型,但是我定义的时候不能确定究竟是那种类型的时候,这个时候用一个泛型来代替。
4.泛型通配符(?)
通配符基本使用
理解如下代码
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 类 > 对象名称
意义: 只能接收该类型及其父类型