Java数据结构与算法之数据结构-逻辑结构-集合(四)------集合之Collection接口
2017-10-10 17:32
507 查看
Java集合类的基本概述:
Java集合中主要有两个大的接口:Collection接口和Map接口,Collection是元素集合,Map是键值对集合;其中List和Set继承了Collection接口,List是有序元素集合,Set是无序元素集合;而ArrayList和LinkedList实现了List接口,HashSet实现了Set接口这两个都比较常用;HashMap和HashTable实现了Map接口并且HashTable是线程安全的,但是HashMap性能更好。这一节中主要探究Java的Collection集合接口的原理和使用。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/f07a66c3ff0649b636492082ce68893a)
图1:
图1显示的是Collection接口在Java8中接口和实现类的层级关系。可以说Collection是java集合接口的顶层接口但是这个接口还继承了父接口Iterable接口(继承了
Iterable接口之后Collection接口的子接口和子接口的实现类都可以使用Iterable接口中定义的Iterator方法用于集合的foreach迭代)。Collection接口拥有众多的子接口,
其中在开发中使用众多的有List接口,Queue接口Set接口等。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/bfeb667b84888a457a31873bae45f94d)
图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类库中有很多具体的实现。
用于对集合类进行排序,搜索以及线程安全等操作。
集合工具类Collections的简单学习:这个工具类位于:java.util.Collections包下。
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;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/1d5cce84cd0c4c6dd72c60145e6851d3)
图3
@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,
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集合就是以其作为扩展的。相关文章推荐
- Java数据结构与算法之数据结构-逻辑结构-集合(七)------集合之Set接口和HashSet和TreeSet、LinkedHashSet实现类总结
- Java数据结构与算法之数据结构-逻辑结构-集合(五)------集合之List接口
- Java数据结构与算法之数据结构-逻辑结构-集合(二)------集合类分述图描述
- Java数据结构与算法之数据结构-逻辑结构-集合(一)------集合类简析
- Java数据结构与算法之数据结构-逻辑结构-集合(三)------集合之Iterable接口
- Java数据结构与算法之数据结构-逻辑结构-集合(八)------Java集合类总结
- Java数据结构与算法之数据结构-逻辑结构-线性结构(9)------Java线性结构概念及其基本操作
- 关于Java的数据结构中物理结构和逻辑结构的理解(早期)
- Java数据结构与算法之数据结构-逻辑结构-集合(六)------集合之ArrayList和LinkedList对比
- Java数据结构与算法之数据结构-存储结构(10)------Java四大存储结构
- 一、Java 集合,Collection接口框架图
- Java集合体系结构图
- JAVA基础再回首(十四)——集合框架、Collection接口、迭代器Iterator、List接口、ListIterator列表迭代器
- java中集合类中Collection接口中的List接口的常用方法熟悉
- Java实现Python的for...else或while...else逻辑结构
- 数据结构(JAVA版本)练习之集合 简易图书管理系统
- java之集合框架一Collection接口
- java中集合类中Collection接口中的Set接口的常用方法熟悉
- 【Java总结-集合】Java集合的Collection接口,ArrayList,LinkedList,HashSet,TreeSet
- 数据结构逻辑和物理结构