笔试过程中,一些需求用到集合:就是用ArrayList
ArrayList:
底层数据结构是数组的形式,满足数组结构的特点:查询快,增删慢
从线程安全问题来看:线程不安全的,不同步,执行效率高
由于ArrayList是List集合的自实现类,它元素可以重复,并且存储和取出一致
存储字符串并遍历
Vector:
底层数据结构是数组的形式,查询快,增删慢
从线程角度看:线程安全的类,同步,执行效率低
特有功能:
public void addElement(E obj)------->相当于:add(Object e)
public Enumeration
Enumeration
boolean hasMoreElements():------>相当于:hasNext()
Object nextElement():----------->相当于:next();
源码:
synchronized:同步锁(多线程中讲):它就可以保证线程安全!
public synchronized void addElement(E obj) {//由同步代码块演变过来的同步方法
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = obj;
LinkedList:
底层数据结构是链接列表,特点:查询慢,增删快
从线程角度看:线程不安全的一个类,不同步,执行效率高
特有功能:
添加功能:
public void addFirst(E e)将指定元素插入此列表的开头。
public void addLast(E e)将指定元素添加到此列表的结尾。
获取功能:
public Object getFirst()返回此列表的第一个元素
public Object getLast()返回此列表的最后一个元素。
删除功能:
public Object removeFirst()移除并返回此列表的第一个元素。
public Object removeLast()移除并返回此列表的最后一个元素。
JDK5以后提供了很多特性:
* 泛型,增强for循环,可变参数,静态导入,自动拆装箱,枚举等的呢过
*
* 增强for循环
* 书写格式:
* for(集合或者数组中的数据类型 变量名:集合或者数组的对象名){
* 输出变量名;
* }
*
* 增强for循环的弊端:
* 遍历数组或者集合的时候,数组对象或者集合对象不能为null
* 如果对象为空,一般加上非空判断
*
* 增强for循环的出现就是为了替代迭代器遍历集合的,以后开发中就是用增强for遍历元素
使用ArrayList存储元素
* 给ArrayList集合存储了一些元素,String类型的元素,Integer类型的元素
* 但是通过迭代器遍历元素,由于,系统不知道集合中存储了哪些元素,所有使用String类型接收,就会出现ClassCastException:类转换异常
* 这样设计不够好!
* 定义一个数组:字符串数组
// String[] str = new String[3] ;
// str[0] = "hello" ;
// str[1] = "world" ;
// str[2] = 100 ;
*
* 数组设计这样好处:提前告诉了开发者,这里只能装String类型的元素,Java根据数组特点---->引出:泛型
* 泛型:把数据类型的明确工作提供提前到了创建对象或者是调用方法的时期明确的一种特殊类型.参数化类型,可以像参数一样进行传递
* 格式:
* <引用类型>:泛型只能放引用类型
* 泛型好处:
* 1)将运行时期异常提前到了编译时期
* 2)解决了黄色警告线问题
* 3)获取数据的时候,不用强制类型转换了
* 泛型的应用:
* 一般情况:泛型可以应用在接口,类,或者方法上;主要用在集合中比较多!
泛型的高级:通配符
* > :可以是任意类型,包括Object类型以及任意的Java类
* extends E>:向下限定,E类型以及E类型的子类
* super E>:向上限定,E类型以及E类型的父类