Java集合概述
概览
Java集合也叫容器,可以容纳其它的Java对象,始于JDK1.2.优点是:
1.降低编程难度
2.提高程序性能
3.提高API间的互操作性
4.降低学习难度
5.降低设计和实现相关API的难度
6.增加程序的重用性
Java容器里只能放对象,对于基本类型(int, long, float, double等),需要将其包装成对象类型后(Integer, Long, Float, Double等)才能放到容器里。很多时候拆包装和解包装能够自动完成。这虽然会导致额外的性能和空间开销,但简化了设计和编程。
泛型
java容器能够容纳任何类型的对象,这一点是通过Java的泛型机制完成的。Java泛型是是编译器为我们提供的一个语法糖,在编译的时候对相应的字符串替换,本身不需要jvm虚拟机的支持。实质上Java的单继承机制才是保证这一特性的根本,因为所有的对象都是Object的子类,容器里只要能够存放Object对象就行了。 事实上,所有容器的内部存放的都是Object对象,泛型机制只是简化了编程,由编译器自动帮我们完成了强制类型转换而已。
//JDK 1.4 or before ArrayList list = new ArrayList(); list.add(new String("Monday")); list.add(new String("Tuesday")); list.add(new String("Wensday")); for(int i = 0; i < list.size(); i++){ String weekday = (String)list.get(i);//显式类型转换 System.out.println(weekday.toUpperCase()); }
//JDK 1.5 or latter ArrayList<String> list = new ArrayList<String>();//参数化类型 list.add(new String("Monday")); list.add(new String("Tuesday")); list.add(new String("Wensday")); for(int i = 0; i < list.size(); i++){ String weekday = list.get(i);//隐式类型转换,编译器自动完成 System.out.println(weekday.toUpperCase()); }
接口和实现类
接口:
java集合统一设计,定义了14个接口。关系如图:
Map接口没有继承自Collection接口,因为Map表示的是关联式容器而不是集合。但Java为我们提供了从Map转换到Collection的方法,可以方便的将Map切换到集合视图。 上图中提供了Queue接口,却没有Stack,这是因为Stack的功能已被JDK 1.6引入的Deque取代。
实现:
一些常见类的实现如图:
迭代器:
java集合的迭代器,为我们提供了遍历容器中元素的方法。只有容器本身清楚容器里元素的组织方式,因此迭代器只能通过容器本身得到。每个容器都会通过内部类的形式实现自己的迭代器。
//visit a list with iterator ArrayList<String> list = new ArrayList<String>(); list.add(new String("Monday")); list.add(new String("Tuesday")); list.add(new String("Wensday")); Iterator<String> it = list.iterator();//得到迭代器 while(it.hasNext()){ String weekday = it.next();//访问元素 System.out.println(weekday.toUpperCase()); }
//使用增强for迭代 ArrayList<String> list = new ArrayList<String>(); list.add(new String("Monday")); list.add(new String("Tuesday")); list.add(new String("Wensday")); for(String weekday : list){//enhanced for statement System.out.println(weekday.toUpperCase()); }