Java中容器[Collection(List,Set,Queue),Map],迭代器(Iterator)和比较器(Comparator)及列表排序

来源:互联网 发布:仿真花淘宝店好评语录 编辑:程序博客网 时间:2024/06/05 02:04
Collection是容器类的根接口,List,Set,Queue是它的直接子接口。
所有的集合(容器)实现类都只能存放对象,如果需要存放基本数据类型的数据,则需要使用包装类。(目前Java提供自动装箱/拆箱功能)
Collection接口的iterator()和toArray()方法都用于获得容器中的所有元素,iterator()返回一个Iterator对象,toArray()返回一个包含所有元素的数组。
List类型的容器允许加入重复对象,按照索引位置排序并且按照在容器中的索引位置检索对象。
Set类型的容器不允许加入重复对象,也不按照某种方式排序对象。
Map接口没有继承Collection接口,Map类型的容器中的每一个元素包含一对键对象和值对象,容器中的键对象不可重复,值对象可以重复。


迭代器Iterator
可迭代是Java集合框架下的所有集合类的一种共性,迭代需要依赖一个迭代器对象。
迭代器(Iterator)模式也叫做游标(Cursor)模式,它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。迭代器为容器而生,本质上是一种便利算法。
迭代器(Iterator)接口有三个方法:
hasNext();判断是否还有下一个元素。
next();迭代器指向下一个元素,并返回下一个元素的引用。
remove();从容器中移除迭代器所指元素。


比较器(Comparator)

借助Comparable接口或者Comparator接口可以实现用户自定义类的大小比较。(String类实现了Comparable接口)

实现了Comparable接口的类是可比较的。
Comparable接口只包含一个comparaTo()方法,只有一个参数,返回int型数据,大于零则表示本对象大于参数对象,小于零表示本对象小于参数对象,等于零表示相等。
public int comparTo(Object o){...}

实现了Comparator接口的类的实例叫做比较器,Comparator接口包含一个函数compare()方法,有两个参数,返回值与compareTo()一样。public int compare(Object arg0,Object arg1){...}
Comparator接口一般不会被几何元素类实现,而是单独实现或用匿名内部类的方式实现。
比较器不仅用于元素的比较,往往还用于几何元素的排序。比较器可以提供强行对集合或者数组进行整体排序的比较函数,将Comparator传递给sort方法(比如Collictions.sort或Arrays.sort),从而实现排序控制。

如果一个集合元素的类型是可比较的(实现了Comparable接口),那么他就具有了默认的排序方法,比较器则是强行改变它默认的比较方式来进行排序。或者有的集合元素不可比较(没有实现Comparable接口),则可用比较器来实现动态的排序。



集合元素的排序
Java结合框架中定义的List的实现有Vector,ArrayList,LinkedList,这些类并没有内置的元素排序支持,可以使用java.util.Collections类中的sort()方法对List元素进行排序,可以给方法传递一个List对象,也可以传递一个List对象和一个Comparator实例。
如果List中的元素全都是相同类型的,并且这个类实现了Comparable接口,可以简单地调用Collections.sort()方法,如果这个类没有实现Comparable接口,就可以传递一个Comparator实例作为sort()的第二个参数进行排序。如果不想使用默认的排序,同样可一个传递一个Comparator实例作为参数来进行排序。










0 0
原创粉丝点击