Java数据结构与算法之数据结构-逻辑结构-集合(四)------集合之Collection接口

Java集合类的基本概述:


Java集合中主要有两个大的接口:Collection接口和Map接口,Collection是元素集合,Map是键值对集合;其中List和Set继承了Collection接口,List是有序元素集合,Set是无序元素集合;而ArrayList和LinkedList实现了List接口,HashSet实现了Set接口这两个都比较常用;HashMap和HashTable实现了Map接口并且HashTable是线程安全的,但是HashMap性能更好。这一节中主要探究Java的Collection集合接口的原理和使用。


一、Collection接口的API和源码解析:

1、Collection的API结构:

图1:

图1显示的是Collection接口在Java8中接口和实现类的层级关系。可以说Collection是java集合接口的顶层接口但是这个接口还继承了父接口Iterable接口(继承了 Iterable接口之后Collection接口的子接口和子接口的实现类都可以使用Iterable接口中定义的Iterator方法用于集合的foreach迭代)。Collection接口拥有众多的子接口, 其中在开发中使用众多的有List接口,Queue接口Set接口等。

2、Collection的源码解析:

该接口在Java.util包下。主要拥有如下的一些方法:

图2:

除去继承于Iterable的方法之外的所有方法都是Collection接口拥有的方法。以下对Collection的部分方法扽别作介绍:

①、  boolean add(E e); 向集合中添加一个元素;

②、 boolean remove(Object o);从集合中删除一个元素;

③、 boolean containsAll(Collection<?> c); 假如该集合中包含指定集合的所有元素则返回true;

④、 boolean containsAll(Collection<?> c); 向集合中添加指定集合的所有元素;

⑤、 boolean removeAll(Collection<?> c); 从集合中删除指定的所有元素;

⑥、 boolean retainAll(Collection<?> c); 保留指定集合中的元素;

⑦、  void clear(); 清空集合中的所有元素;

具体的含义和操作技巧可以在实战中去练习。

注意:

Java.util.Collection是java集合类的一个顶级接口,其提供了对java集合对象进行基本操作的通用接口方法。Collection接口再java类库中有很多具体的实现。

二、Java中Collection和Collections的区别

如上文阐述Collection是集合类的一个上层接口,顶一个集合框架的共同方法。然而Collections是一个操作集合类的一个工具类(帮助类)。其中提供了众多的静态方法 用于对集合类进行排序,搜索以及线程安全等操作。

集合工具类Collections的简单学习:这个工具类位于:java.util.Collections包下。

1、工具类中定义的静态常量:

private static final int BINARYSEARCH_THRESHOLD   = 5000;
    private static final int REVERSE_THRESHOLD        =   18;
    private static final int SHUFFLE_THRESHOLD        =    5;
    private static final int FILL_THRESHOLD           =   25;
    private static final int ROTATE_THRESHOLD         =  100;
    private static final int COPY_THRESHOLD           =   10;
    private static final int REPLACEALL_THRESHOLD     =   11;
    private static final int INDEXOFSUBLIST_THRESHOLD =   35;

2、 还有众多的方法:

图3

3、 集合工具类的应用例子:

简单的实现一个使用Collections进行List排序的例子:

@Test
	public void testCollections(){
		//生成一个随机数组
		List<Integer> list = new ArrayList<Integer>();
		
		Random rand = new Random();
		
		//生成一个随机数组
		for(int i = 0; i<100;i++){
			list.add(rand.nextInt(500));
		}
		
		//打印随机数组的值
		System.out.println("未排序之前的数组: ");
		for(Integer in: list){
			System.out.print(in+",");
		}
		System.out.println();
		System.out.println();
		
		//调用Collections工具类对List进行排序
		Collections.sort(list);
		
		//对排序之后的数据打印
		//打印随机数组的值
		System.out.println("排序之后的数组: ");
		for(Integer in: list){
			System.out.print(in+",");
		}
	}

排序的结果为:

未排序之前的数组: 
75,164,356,330,90,210,349,269,44,392,205,289,342,415,96,292,148,313,153,271,451,459,97,87,13,467,407,329,84,376,314,7,319,304,71,417,325,400,61,83,416,466,363,372,121,343,173,60,416,297,399,343,214,492,360,333,271,162,158,238,14,265,240,339,399,268,73,315,225,70,335,417,85,174,77,163,91,41,457,116,160,343,27,180,245,316,14,100,84,8,244,77,73,409,271,81,458,256,35,213,

排序之后的数组: 
7,8,13,14,14,27,35,41,44,60,61,70,71,73,73,75,77,77,81,83,84,84,85,87,90,91,96,97,100,116,121,148,153,158,160,162,163,164,173,174,180,205,210,213,214,225,238,240,244,245,256,265,268,269,271,271,271,289,292,297,304,313,314,315,316,319,325,329,330,333,335,339,342,343,343,343,349,356,360,363,372,376,392,399,399,400,407,409,415,416,416,417,417,451,457,458,459,466,467,492,


三、总结:

Collection只是一个Java众多接口的一个简单接口而已,因此知识点也相对简单。之所以重视它,就是因为Java集合就是以其作为扩展的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值