读书人

兑现模式之容器

发布时间: 2012-09-25 09:55:58 作者: rapoo

实现模式之容器

???? 1. List

?????List里面的元素是有序的,两个常用实现类是ArrayList与LinkedList。这两个实现类的性能恰如镜像,ArrayList的访问速度快,添加和删除元素的速度慢;而LinkedList正好相反。

?

???? 2. Set

???? Set总共有3种实现:HashSet,LinkedHashSet和TreeSet。HashSet速度最快,但其中的元素是无序的。LinkedHashSet按照元素被加入容器的顺序来对元素排序,但代价却是添加和删除元素需要额外消耗30%的时间。TreeSet用Comparator来保持元素的顺序,不过在添加删除元素的时候复杂度随着容器的增大而升高。

?

???? 3.Map

???? Map实现类与Set类似,HashMap最快,LinkedHashMap保存着元素的顺序,迭代顺序是它们加入容器的顺序。TreeMap基于键的顺序进行迭代,但是插入和检查元素的存在性随着元素的增多而升高。

?

?????4. Collections

???? 工具类Collections是一个类库,它提供了一些不能与任何一款容器接口完美契合的容器操作。

???? 4.1 查询

???? Collections提供了查询列表中某一个元素在列表中索引的方法IndexOf(), 不过该方法的操作耗时与列表的尺寸成正比。如果列表是有序的,可以调用Collections.binarySearch(list,element)来获取元素在列表中的索引。

?

????? 4.2 排序

????? Reserve(list) 将容器中元素顺序反置。

????? Shuffle(list) 随机打乱元素顺序。

??????Sort(list)和Sort(list,comparator) 将元素按升序排列。

?

????? 4.3 不可修改的容器

????? 目前,最基本的容器接口允许容器被修改。如果要把容器传入不信任的代码,可以用Collections把它包裹到一个特殊的实现类里面,如果客户试图修改它,就抛出运行异常。

????? 比如:

????? List<String> list = new ArrayList<String>();

????? list.add("世界第一");

????? Collection<String> unmodifyList = Collections.unmodifiableCollection(list);

????? Iterator<String> listIterator =? unmodifyList.iterator();

??????listIterator.next();

????? listIterator.remove();//这里会报错

?

?????

读书人网 >编程

热点推荐