java学习笔记8-Collection和泛型

集合是java提供的一种容器可以用来存储多个数据

集合和数组都是容器,有什么区别?
数组的长度是固定的,集合的长度是可变的
数组中存储的是同一类型的数据,可以存储基本数据类型,集合存储的都是对象,而且对象的类型可以不一致.

集合按照其存储结构可以分为单列(java.util.collection)和双列集合(java.util.map).collection是单列集合的根接口,它有两个重要的子接口分别是java.util.list和java.util.set,list集合的特点是存储元素有序而且可重复,set集合的特点是存储元素无序且不可重复

list接口的主要实现类有ArrayList和linkedList,set接口的主要实现类有HashSet和TreeSet

iterator是一个接口,主要用于迭代访问Collection中的元素,因此iterator对象也被称为迭代器

每个集合对象都有自己的迭代器,iterator hasNext(),判断迭代器中是否有下一个元素,next(),返回迭代器中的下一个元素,如果没有元素仍调用此方法会报错 NoSuchElementException

增强for是专门用来遍历数组和集合的,它是jdk1.5以后出来的功能,它的内部原理其实就是一个iterator迭代器,在遍历过程中不允许对集合进行增删

iterator的next()方法做了两件事情,1.取出下一个元素 2.将指针向下移动一位

使用迭代器遍历集合的过程中,如果对集合进行了增删会报并发修改异常
concurrentModificationException ,因为迭代器是依赖于集合存在的,集合发生了变化,迭代器并不知道,所有就报错了.迭代器在遍历的过程中不要使用集合对象去修改集合,可以改为用迭代器对象去修改集合(添加在迭代的元素之后),或者是用集合对象去遍历集合并用集合对象去修改集合(添加在集合的最后面).

集合中是可以存放任意对象的,只要把对象存储到集合中后会自动提升为Object类型,当我们取出每个对象进行操作时必须进行类型转换

泛型:可以在类或方法中预支地使用未知的类型,当没有指定泛型时,默认类型是object类型

泛型有什么好处? 1.将运行时期的ClassCastException转移到了编译时期,变成了编译失败 2.避免了类型强转的麻烦

泛型是数据类型的一部分,我们将类名和泛型合并看做是数据类型

泛型,用来灵活地将数据类型应用到不同的类\方法\接口中,将数据类型作为参数进行传递

含有泛型的类 定义格式:修饰符 class 类名<代表泛型的变量> { }
使用泛型,即什么时候确定泛型.在创建对象的时候,确定泛型

含有泛型的方法,调用方法时确定泛型的类型
定义格式: 修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
举例:public void show(MVP mvp) {System.out.println(mvp.getClass()); }

含有泛型的接口, 定义格式:修饰符 interface 接口名<代表泛型的变量>{}
使用格式:1.定义子类时确定泛型的类型 2.始终不确定泛型类型,直到创建对象时确定泛型的类型

泛型的通配符:不知道使用什么类型来接收的时候,可以使用?,?表示未知通配符.一旦使用泛型通配符后,只能使用Object类中的共性方法,集合中元素的自身方法不能使用

泛型不存在继承关系 Collection list=new ArrayList();是错误的

通配符高级使用,受限泛型 上限:<? extends 类> 只能接收该类型及其子类 下限:<? super 类> 只能接收该类型及其父类

猜你喜欢

转载自blog.csdn.net/wwzzh1989/article/details/89089589
今日推荐