数组与集合的区别
(1): 长度区别:
数组的长度是固定的而集合的长度是可变的
(2): 存储数据类型的区别:
数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型
(3): 内容区别:
数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素
简述ArrayList、Vector、LinkedList三者的特点
ArrayList:底层是数组,查询快,增删慢,线程不安全,不同步,效率高
Vector:底层是数组,查询快,增删慢,线程安全,同步,效率低
LinkedList:底层是链表,查询慢,增删快,线程不安全,不同步,效率高
集合的并发修改异常
出现:
当我们用迭代器遍历集合的同时想要改变集合元素时,控制台会抛出ConcurrentModificationException 并发修改异常
原因:
我们用的是迭代器,进行遍历,在遍历之前,迭代器已经知道了,你集合中的所有元素
然后你在迭代的过程当中,突然间想要添加一个元素,迭代器肯定加不进去的
解决:
1.用迭代器中的添加方法,不用集合的添加方法
while (iterator.hasNext()) {
String ele = iterator.next();
if("world".equals(ele)) {
//arrayList.add("javaee"); // ConcurrentModificationException 并发修改异常
iterator.add("javaee");//用迭代器的添加方法
}
}
2.用for循环遍历
for(int i=0;i<arrayList.size();i++) {
String ele = arrayList.get(i);
if("world".equals(ele)) {
arrayList.add("javaee");
}
}
泛型
泛型概述:
泛型是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。
参数化类型,把类型当作参数一样的传递。
泛型的格式 :
<数据类型> 这里的数据类型只能是引用数据类型
泛型好处
(1): 把运行时期的问题提前到了编译期间
(2): 避免了强制类型转换
(3):优化了程序设计,解决了黄色警告线
注意:泛型只在编译期有效 但在运行期就擦除了
泛型基本使用
泛型可以定义在接口,类,方法上
public class Teacher<T> {
T name;
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
}
public class MyDemo {
public static void main(String[] args) {
Teacher<String> stringTeacher = new Teacher<>();
stringTeacher.setName("abc");
String name = stringTeacher.getName();
Teacher<Integer> integerTeacher = new Teacher<>();
integerTeacher.setName(100);
integerTeacher.getName();
}
}
泛型通配符<?>:
任意类型,如果没有明确,那么就是Object以及任意的Java类了
? extends E: 向下限定,E及其子类
? super E: 向上限定,E及其父类
/**
* 泛型如果明确了数据类型以后,那么要求左右两边的数据类型必须一致
*/
Collection<Object> col1 = new ArrayList<Object>() ;
Collection<Object> col2 = new ArrayList<Animal>() ;//报错
// ? 表示任意的数据类型
Collection<?> col5 = new ArrayList<Object>() ;
Collection<?> col6 = new ArrayList<Animal>() ;
// ? extends E : 向下限定 , ? 表示的是E或者E的子类
// Collection<? extends Animal> col9 = new ArrayList<Object>() ;//报错
Collection<? extends Animal> col10 = new ArrayList<Animal>() ;
Collection<? extends Animal> col11 = new ArrayList<Dog>() ;
// ? super E: 向上限定 , ? 表示的是E或者E的父类
Collection<? super Animal> col13 = new ArrayList<Object>() ;
Collection<? super Animal> col14 = new ArrayList<Animal>() ;
// Collection<? super Animal> col15 = new ArrayList<Dog>() ;//报错