J-17 集合对象

List接口

ArrayList类
Vector类
LinkedList类
泛型
JDK5新特性

ArrayList类

ArrayList类概述

底层数据结构是数组,查询快,增删慢
线程不安全,效率高

ArrayList案例

  • 存储字符串并遍历
  • 存储自定义对象并遍历

Vector类

Vector类概述

底层数据结构是数组,查询快,增删慢
线程安全,效率低

Vector类特有功能

public void addElement(Object obj) -- add()

public Object elementAt(int index) -- get()

public Enumeration elements() -- Iterator iterator()

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

注:Vector类是jdk1.0之后就有的,出现较早,后面对应的函数功能相似,是简化名称后的函数名,所以优先使用后面的函数。

Vector案例

  • 存储字符串并遍历
  • 存储自定义对象并遍历

LinkedList类

LinkedList类概述

底层数据结构是链表,查询慢,增删快
线程不安全,效率高

LinkedList类特有功能

添加功能

public void addFirst(Object e)
public void addLast(Object e)

获取功能

public Object getFirst()
public Object getLast()

删除功能

public Object removeFirst()
public Object removeLast()

LinkedList案例

存储字符串并遍历
存储自定义对象并遍历

泛型

泛型的概述

泛型是一种特殊的类型,它把指定类型的工作推迟到代码声明并实例化类或方法的时候进行。
也被称为参数化类型,可以把类型当作参数一样传递过来,在传递过来之前我不明确,但是在使用的时候我就用明确了。

格式

public class 类名<泛型类型1,…>

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

好处

① 优化了程序设计,提高了程序的安全性
② 将运行期遇到的问题转移到了编译期
③ 省去了类型强转的麻烦

使用情况

看API,如果类、接口、抽象类后面跟的是< E >,就说明要使用泛型。
泛型一般在集合中使用。

泛型的使用

  • 泛型类
    把泛型定义在类上

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

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

  • 泛型方法
    把泛型定义在方法上

      格式:public <泛型类型> 返回类型 方法名(泛型类型 .)
    
  • 泛型接口
    把泛型定义在接口上

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

通配符

  • ?:任意类型,如果没有明确,那么就是Object以及任意的Java类了
  • ? extend E:向下限定,E及其子类
  • ? super E:向上限定,E及其父类

JDK5新特性 -- 增强for

总结

自动拆装箱,泛型,增强for,静态导入,可变参数,枚举。

增强for

概述

简化数组和Collection集合的遍历

格式

for(元素数据类型 变量 : 数组或者Collection集合) {
	使用变量即可,该变量就是元素
}

分析

  • 好处:简化遍历,可替代迭代器
  • 注意事项:增强for的目标要判断是否为null

集合遍历(三种)

// 遍历集合
// 迭代器
	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);
	}

静态导入

格式

格式:import static 包名….类名.方法名;

直接导入到方法级别

注意事项

① 方法必须是静态的
② 如果有多个同名的静态方法,容易不知道使用谁。这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。

可变参数

概述

定义方法的时候不知道该定义多少个参数

格式

修饰符 返回值类型 方法名(数据类型...  变量名){}
public int sum(int... a){      }

注意事项

  • 这里的变量a其实是一个数组
  • 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

Arrays工具类中的一个方法

public static List asList(T... a)
T可以为任意引用类型。

posted @ 2015-12-28 15:35  小懒66  阅读(158)  评论(0编辑  收藏  举报