Java中Collections学习


一直没有专门看看Collections到底能做什么。前几天导师还问到了这个问题。

现在学习总结一下:

Collection是集合类的一个顶级接口,其直接继承接口有List与Set
而Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。此类不能实例化。

Collections中有一些工具函数,比如说sort、reverse、fill等等。

还有一些其他很好用的东西:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class comz {

	public static void main(String[] ss) {
		Collection<Double> list = new ArrayList<Double>();
		double array[] = { 112, 111, 23, 456, 231 };
		for (int i = 0; i < array.length; i++) {
			list.add(array[i]);
		}
		Collection<Double> unmodifiableCollection = Collections
				.unmodifiableCollection(list);
		unmodifiableCollection.add(1.2);
		for (Double d : unmodifiableCollection) {
			System.out.println(d);
		}
	}
}

上面的代码就是使用它返回了一个不可修改的Collection。这对于开发对外的api来说至关重要(谁都不希望自己给对外用户返回的数据用户自己在Collection上做修改)。

但是需要注意的是,如果我们自己在代码中修改了原始的那个list,那么unmodifiableCollection也会被修改(这里使用了代理模式)。

看下面的例子:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class comz {

	public static void main(String[] ss) {
		Collection<String> list = new ArrayList<String>();
		String array[] = { "a", "b", "c", "d" };
		for (int i = 0; i < array.length; i++) {
			list.add(array[i]);
		}
		Collection<String> unmodifiableCollection = Collections
				.unmodifiableCollection(list);
		System.out.println(list.size());
		list.remove("a");
		System.out.println(list.size());
		System.out.println(unmodifiableCollection.size());
	}
}

上面的例子输出是:

4

3

3

-------------------------------------------------------------

看UnmodifiableCollection的源码:

public boolean add(E paramE)
    {
      throw new UnsupportedOperationException();
    }

    public boolean remove(Object paramObject)
    {
      throw new UnsupportedOperationException();
    }

这里在操作的时候直接就抛异常了。从而做到了不可修改。

另外,从实现上来看,先看代码

static class UnmodifiableCollection<E>
  implements Collection<E>, Serializable
  {
    private static final long serialVersionUID = 1820017752578914078L;
    final Collection<? extends E> c;

    UnmodifiableCollection(Collection<? extends E> paramCollection)
    {
      if (paramCollection == null)
        throw new NullPointerException();
      this.c = paramCollection;
    }

从实现上来看,UnmodifiableCollection仅仅是在类中引用了原始的那个Collection的对象。类似于代理模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值