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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值