JAVASE之泛型,集合
Java集合
集合体系概述(单列集合,双列集合是map):
顶层的父接口Collection中一定定义了所有子类集合的共同属性和方法.
Collection中常用方法
Boolean add(Object e) 向集合中添加元素
Void clear() 清空集合中所有元素.
Boolean contains(Object o):判断集合中是否包含某个元素
Boolean isEmpty()判断集合中的元素是否为空
Boolean remove(Object o):根据元素的内容来删除某个元素.
Int size()获取集合的长度
Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中.
迭代器:
Java中提供了很多个集合,在存储元素时,采用的存储方式不同.我们要取出这些集合中的元素,可通过一种通用的获取方式来完成.
Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把元素取出,继续在判断,如果还有就再取出来.一直把集合中的所有元素全部取出.这种取出方式专业术语称为迭代.
集合中把这种取元素的方式描述在Iterator接口中.Iterator接口的常用方法有:
hasNext();方法:判断集合中是否有元素可以迭代
E Next()方法;用来返回迭代的下一个元素,并把指针向后移一位.
常见异常之并发修改异常:
Exception in thread “main” java.util.ConcurrentModificationException:并发修改异常.
迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出并发修改异常.
解决方案:
在使用迭代器进行遍历的时候使用迭代器来进行修改.
不使用迭代器遍历集合,可以在遍历的时候使用集合的方法进行增加或删除.
使用迭代器遍历,就需要使用Iterator的子接口ListIterator来实现向集合中添加
泛型:
在集合中是可以存放任意对象的,只要把对象存储集合后,这时他们都会被提升为Object类型.当我们取出每一个对象.并且进行相应的操作,这时必须采用类型转换.
由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常,所以引出泛型
泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点
好处:
避免了类型转换的问题;可以减少黄色警告线;可以简化我们代码的书写.
增强for循环(foreach)
增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的.内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作.
格式:
for(元素的数据类型 变量 : Collection集合or数组)
增强for是用于遍历Collection和数组.通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作
常见的数据结构:
数组,链表,栈和队列;
数组:
数组的长度一旦定义则不可改变
数组中的元素都有整数索引
数组只能存储同一类型的元素
数组可以存储基本数据类型,也可以存储引用数据类型.
查找元素快:通过索引,可以快速访问指定位置的元素
增删元素慢:每次添加元素需要移动大量元素或者创建新的数组.
链表:
多个节点之间,通过地址进行连接.
查找元素慢:想查找某个元素,需要通过连接的节点,一次向后查找指定元素.
增删元素快:只需要修改连接下个元素的地址即可.
堆栈:
先进后出(即,存进去的元素,要在后他后面的元素一次取出后,才能取出该元素)(示例:子弹弹弹夹)
队列:
先进先出(即,存进去的元素,要在后他前面的元素一次取出后,才能取出该元素)(实例:安检检查)
List集合
特点:
有序(读取顺序是一致的);有整数索引;允许重复;
特有方法:
Void add(int index,E element):将元素添加到index索引位置上.
E get(int index) 根据index索引获取元素.
E remove(int index) 根据index索引删除元素
E set(int index,E element) 将index索引位置的元素设置为element.
List的常用子类:(ArrayList和LinkedList)
ArrayList:底层是数组结构,查询块,增删慢
LinkedList:底层是链表结构,查询慢,增删快.
链表LinkedList常用方法:
Void addFirst(E e):向链表的头部添加元素
Void addLast(E e):向链表的尾部添加元素
E getFirst();获取链头的元素,不删除元素
E getLast();获取链尾的元素,不删除元素
E removeFirst();返回链头的元素并删除链头的元素
E removeLast();返回链尾的元素并删除链尾的元素.