Java集合排序及java集合类详解(Collection、List、Ma(17)

时间:2025-07-11

java的集合排序

中的elementData 属性就必须存在一个需要动态的扩充容量的机制。我们看下面的代码,它描述了这个扩充机制:

这个方法的作用就是用来判断当前的数组是否需要扩容,应该扩容多少。其中属性:modCount是继承自父类,它表示当前的对象对elementData数组进行了多少次扩容,清空,移除等操作。该属性相当于是一个对于当前List 对象的一个操作记录日志号。 我们主要看下面的代码实现:

1. 首先得到当前elementData 属性的长度oldCapacity。

2. 然后通过判断oldCapacity和minCapacity参数谁大来决定是

否需要扩容

如果minCapacity大于oldCapacity,那么我们就对当前

的List对象进行扩容。扩容的的策略为:取(oldCapacity *

3)/2 + 1和minCapacity之间更大的那个。然后使用数组拷

贝的方法,把以前存放的数据转移到新的数组对象中

如果minCapacity不大于oldCapacity那么就不进行扩容。

下面我们看看上的那个ensureCapacity方法的是如何使用的:

上的两个add方法都是往List 中添加元素。每次在添加元素的时候,我们就需要判断一下,是否需要对于当前的数组进行扩容。

我们主要看public boolean add(Object o)方法,可以发现在添加一个元素到容器中的时候,首先我们会判断是否需要扩容。因为只增加一个元素,所以扩容的大小判断也就为当前的size+1来进行判断。然后,就把新添加的元素放到数组elementData中。

第二个方法public boolean addAll(Collection c)也是同样的原理。将新的元素放到elementData数组之后。同时改变当前List 对象的size属性。

类似的List 中的其他的方法也都是基于数组进行操作的。大家有兴趣可以看看源码中的更多的实现方式。

最后我们再看看如何判断在集合中是否已经存在某一个对象的:

由源码中我们可以看到,public boolean contains(Object elem)方法是通过调用public int indexOf(Object elem)方法来判断是否在集合中存在某个对象elem。我们看看indexOf方法的具体实现。

首先我们判断一下elem 对象是否为null ,如果为null的话,

那么遍历数组elementData 把第一个出现null的位置返回。

如果elem不为null 的话,我们也是遍历数组elementData ,

并通过调用elem对象的equals()方法来得到第一个相等的元素的

位置。

这里我们可以发现,ArrayList中用来判断是否包含一个对象,调用的是各个对象自己实现的equals()方法。在前面的高级特性里面,我们可以知道:如果要判断一个类的一个实例对象是否等于另外一个对象,那么我们就需要自己覆写Object类的public boolean equals(Object obj) 方法。如果不

Java集合排序及java集合类详解(Collection、List、Ma(17).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219