数组和集合
数组不仅可以存放基本数据类型也可以容纳属于同一种类型的对象。数组的操作是高效率的,但也有缺点。比如数组的长度是不可以变的,数组只能存放同一种类型的对象(或者说对象的引用)。
JDK中提供了Java集合类,所有Java集合类都位于Java.util包中,与Java数组不同,Java集合不能存放基本数据类型数据,而只能存放对象的引用。如果在集合类中既想使用简单数据类型,又想利用集合类的灵活性,就可以把简单数据类型数据变成该数据类型类的对象(例如基本数据类型转为引用数据类型,类似int 转成 Integer),然后放入集合中处理,但这样执行效率会降低。
集合分类:Collection接口和Map接口
Java中的集合类可以分为两大类:一类是实现Collection接口;另一类是实现Map接口。如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口。
Collection是一个基本的集合接口,Collection中可以容纳一组集合元素(Element)。
Collection有两个重要的子接口:List和Set
List接口和Set接口的区别:
List接口是一个有序的集合,可以包含重复的元素,List可以有多个null元素,List中的每个元素都有索引,提供了按索引访问的方式。List类似于Java的数组。实现类有: ArrayList、Vector、LinkedList。
Set接口是一个无序的集合,不能包含重复的元素,Set最多有一个null元素,对Set中任意的两个元素element1和element2都有elementl.equals(element2)= false。此接口模仿了数学上的集合概念。 实现类有:TreeSet、HastSet、LinkHastSet。
Map接口
Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。
Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。实现类:HashMap、Hashtable、LinkedHashMap和TreeMap
疑问:图最左边有个Iterator接口是干什么的?
Iterator接口
Iterator:所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
1.hasNext()是否还有下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。
集合类带来的好处
(1)降低编程难度:在编程中会经常需要链表、向量等集合类,如果自己动手写代码实现这些类,需要花费较多的时间和精力。调用Java中提供的这些接口和类,可以很容易的处理数据。
(2)提升程序的运行速度和质量:Java提供的集合类具有较高的质量,运行时速度也较快。使用这些集合类提供的数据结构,程序员可以从“重复造轮子”中解脱出来,将精力专注于提升程序的质量和性能。
(3)无需再学习新的APl:借助泛型,只要了解了这些类的使用方法,就可以将它们应用到很多数据类型中。如果知道了LinkedList<String>的使用方法,也会知道LinkedList<Double>怎么用,则无需为每一种数据类型学习不同的API。
(4)增加代码重用性:也是借助泛型,就算对集合类中的元素类型进行了修改,集合类相关的代码也几乎不用修改。