6.2ArrayList,Vector,Linkedlist

来源:互联网 发布:数据恢复 太星 正大 编辑:程序博客网 时间:2024/06/16 19:14
1:List的子类
(1)List的子类特点
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector:
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高

(3)Vector(了解)

Vector的特有功能:

a:添加
public void addElement(E obj)--add()
b:获取
public Object  elementAt(int index)--get()

public Enumeration elements()--  iterator()

boolean hasMoreElements()-- hasNext()
Object nextElement()-- next()

(4)LinkedList
A:有特有功能
A:添加功能
public void addFirst(Object e)
public void addLast(Object e)
B:获取功能
public Object getFirst()
public Obejct getLast()
C:删除功能
public Object removeFirst()

public Object removeLast()

2:泛型

(1)泛型概述
是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。
(2)格式:
<数据类型>
注意:该数据类型只能是引用类型。
(3)好处:
A:把运行时期的问题提前到了编译期间
B:避免了强制类型转换
C:优化了程序设计,解决了黄色警告线问题,让程序更安全
(4)泛型的前世今生
A:泛型的由来
Object类型作为任意类型的时候,在向下转型的时候,会隐含一个转型问题(强转)
B:泛型类

把泛型定义在类上

格式:publicclass 类名<泛型类型1,…>

注意:泛型类型必须是引用类型

C:泛型方法

格式:public<泛型类型> 返回类型方法名(泛型类型 .)

D:泛型接口

格式:public  interface 接口名<泛型类型1…>

E:泛型高级通配符

?:任意类型,如果没有明确,那么就是Object以及任意的Java类了

? extends E:向下限定,E及其子类

? super E:向上限定,E极其父类

(5)我们在哪里使用呢?
一般是在集合中使用。

3:增强for循环
(1)JDK5的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举
(2)格式:
for(元素的数据类型 变量名 : 数组或者Collection集合的对象) {
使用该变量即可,该变量其实就是数组或者集合中的元素。
}

ArrayList存储字符串并遍历。要求加入泛型,并用增强for遍历。

A:迭代器

B:普通for

C:增强for

// 创建集合对象

ArrayList<String> array = new ArrayList<String>();

// 创建并添加元素

array.add("hello");

array.add("world");

array.add("java");

// 遍历集合

// 迭代器

Iterator<String> it = array.iterator();

while (it.hasNext()) {

String s = it.next();

System.out.println(s);

}

System.out.println("------------------");

// 普通for

for (int x = 0; x < array.size(); x++) {

String s = array.get(x);

System.out.println(s);

}

System.out.println("------------------");

// 增强for

for (String s : array) {

System.out.println(s);

}

(3)好处:
简化了数组和集合的遍历
(4)弊端
增强for循环的目标不能为null。建议在使用前,先判断是否为null。


4:静态导入
(1)可以导入到方法级别的导入
(2)格式:
import static 包名....类名.方法名;
(3)注意事项:
A:方法必须是静态的

B:如果多个类下有同名的方法,就不好区分了,还得加上前缀,所以一般我们并不使用静态导入。


5:可变参数
(1)如果我们在写方法的时候,参数个数不明确,就应该定义可变参数。
(2)格式:
修饰符 返回值类型 方法名(数据类型... 变量) {}
注意:
A:该变量其实是一个数组名
B:如果一个方法有多个参数,并且有可变参数,可变参数必须在最后
(3)Arrays工具类的一个方法

public static <T> List<T> asList(T... a):把数组转成集合

注意事项:虽然可以把数组转成集合,但是集合的长度不能改变。(可以修改不能增删)


1 0