谈谈Java的Collection接口
谈谈Collection
前言
这一篇讲的collection接口;首先,集合是用来存储数据的,它是基于某种数据结构数据容器。常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。集合大类分为了Collection和Map。如下图
Collection
这一篇文章的内容——现在讲下collection,“集合、容器”,用来存储数据的,它是一个接口,不能直接实例化使用;只能通过它的子类来完成,从上图来看,Collection分为List和Set,List集合中的元素是有序的、可重复的,而Set集合中的元素是无序的、不能重复的。List集合强调的是有序,Set集合强调的是不重复。下面是它的已知实现类。
Collection是描述所有序列容器的共性的根接口,可能会被认为是一个附属接口,即因为要表示其他若干个接口的共性而出现的接口。同时为什么要将其作为接口?是因为可以使我们能够创建更通用的代码。通过针对接口而非具体实现来编写代码,这样,才可以更好地应用于更多的对象类型。
下面的是Collection更加仔细一点的分类。今天这篇重点介绍一下Collection的几个方法,掌握了这些,对于它的子类都是可以直接拿来用的。子类的介绍后面再总结出来。
方法
遇到一些自己不熟的知识点,在IDEA上可以直接查看该接口的详细源码(ctrl加鼠标左键),点开旁边的结构图按钮,可以直观得去查看这些方法
1.boolean add(E)
这个一看就知道了,就是添加功能,往集合里面添加元素或者对象的方法,若是list这种,因为它返回都是true,一般情况下,可以随便往里面添加。
Collection s = new Collection();
s.add(你要添加的);
s.add("你要添加的");
有时需要注意的时候,如果操作的集合是不允许重复值的,往里面添加就会报错。返回的是false.
2.void clear()
移除容器中的所有元素,该集合不支持移除的话就会抛出UnsupportedOperationException异常(不支持该操作)
//接着用上面的s集合
s.clear();
//这时候集合为空了
3.boolean contains(Object o)
用来检查此集合是否包含指定元素或者对象,包含则返回true不包含就返回false;会返回两种错误。
4.boolean isEmpty()
用来检查集合中是否为空,如果为空就返回true。
5.Iterator iterator()
返回一个Iterator迭代器,这个方法是用来遍历集合中的元素的,在一些需要获取集合中的元素(包括打印输出,调用等场景下),依赖于集合而存在的,有next方法和hasNext方法。
这两个方法一般情况下都是绑定一起用的。形式如下。
//其主要的用法如下,遍历的功能
//通过集合对象获取迭代器对象
Iterator i = 集合.iterator();
//hasNext方法是布尔型的返回值,有元素在集合里面的时候就会返回true
while(it.hasNext()){
System.out.println(it.next());
}
6.int size()
用来返回的集合的长度,也就是集合里面的元素的个数。
//直接使用,返回长度
集合.size();
7.Boolean remove()
用来删除集合中的元素,对象,只要有移除动作就会返回true。
总结
什么是可选操作
在看源码的时候,会发现有些方法在后面会标记为可选操作 (optional operation)。
执行各种不同的添加和移除的方法在Colletion接口中都是可选操作,这意味着实现类并不需要为这些方法提供功能定义。......如果一个操作是可选的,编译器仍旧会严格要求你只能调用该接口中的方法。
它声明调用某些方法将不会执行有意义的行为,相反,它们会抛出异常。 ——《Java编程思想》
异常UnsupportedOperationException(这个和上面讲remove时候不支持操作的时候抛出一样的异常)
大概意思是collection子类可以重写这个方法以达到子类自己的目的,也可以不覆盖这个方法但是。没有实现这个方法的子类使用这个方法的话会抛出UnsupportedOperationException异常。(这个未获得支持的异常在运行时候才能探测到,属于动态类型异常),先看下报错的代码示例
package music.daima.ebook;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* @author yhy
* 这个是用来观察java中的可选操作方法的一些特点以及定义使用以及报错的原因,这是书上的代码
*/
public class Unsupport {
static void test(String msg, List<String> list) {
System.out.println("--- " + msg + " ---");
Collection<String> c = list;
Collection<String> subList = list.subList(1,8);
Collection<String> c2 = new ArrayList<String>(subList);
try {
c.retainAll(c2);
}
catch(Exception e) {
System.out.println("retainAll(): " + e);
}
try { c.removeAll(c2); } catch(Exception e) {
System.out.println("removeAll(): " + e);
}
try { c.clear(); } catch(Exception e) {
System.out.println("clear(): " + e);
}
try { c.add("X"); } catch(Exception e) {
System.out.println("add(): " + e);
}
try { c.addAll(c2); } catch(Exception e) {
System.out.println("addAll(): " + e);
}
try { c.remove("C"); } catch(Exception e) {
System.out.println("remove(): " + e);
}
// The List.set() 虽然改变了值但没有改变它的数据结构尺寸
try {
list.set(0, "X");
} catch(Exception e) {
System.out.println("List.set(): " + e);
}
}
public static void main(String[] args) {
//asList方法:返回由指定数组支持的固定大小的列表。 (将返回的列表更改为“写入数组”。)该方法作为基于数组和基于集合的API之间的桥梁,与Collection.toArray()相结合 。
//返回的列表是可序列化的,并实现RandomAccess 。 此方法还提供了一种方便的方式来创建一个初始化为包含几个元素的固定大小的列表:
List<String> list = Arrays.asList("A B C D E F G H I J K L".split(" "));
System.out.println(list.getClass());
test("Arrays.asList()", list);
// System.out.println(list1.getClass());
test("Modifiable Copy", new ArrayList<String>(list));
//test("unmodifiableList()",Collections.unmodifiableList(new ArrayList<String>(list)));
}
}
output(输出):
集合使用的整体框架(步骤)
谈谈Java的Collection接口的更多相关文章
- java集合——Collection接口
Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...
- java.util (Collection接口和Map接口)
1:Collection和Map接口的几个主要继承和实现类 1.1 Collection接口 Collection是最基本的集合接口,一个Collection代表一 ...
- Java基础——collection接口
一.Collection接口的定义 public interfaceCollection<E>extends iterable<E> 从接口的定义中可以发现,此接口使用了泛型 ...
- JAVA中Collection接口和Map接口的主要实现类
Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素 ...
- Java 集合-Collection接口和迭代器的实现
2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...
- java容器——Collection接口
Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...
- Java容器---Collection接口中的共有方法
1.Collection 接口 (1)Collection的超级接口是Iterable (2)Collection常用的子对象有:Map.List.Set.Queue. 右图中实现黑框的ArrayLi ...
- Java之Collection接口(单列集合根接口)
集合概述 集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组既然都是容器,它们有啥区别呢? 区别1: 数组的长度是固定的. 集合的长度是可变的. 区别2: 数组 ...
- Java 之 Collection 接口
一.Collection 集合 Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.List 和 java.util.Set. ...
随机推荐
- Python--day61--Django的ORM
下载驱动
- hadoop-1.2.1 伪分布配置
首先JDK安装及相关环境变量配置 # Java environment setting JAVA_HOME=/usr/java/default CLASSPATH=.:$JAVA_HOME/lib/t ...
- 阿里巴巴Java编程规范考试
阿里巴巴Java编程规范考试 今天在阿里云官网把阿里巴巴Java编程规范认证考试考过了, 写下这篇文章总结一下考试中需要注意的知识点, 主体内容还是要直接看规范: 编程规约 异常日志 单元测试 安全规 ...
- 2018-7-31-C#-判断两条直线距离
title author date CreateTime categories C# 判断两条直线距离 lindexi 2018-07-31 14:38:13 +0800 2018-05-08 10: ...
- 实体Bean
持久化实体管理EntityManager EntityManager 在Java persistence规范中,EntityManager是为所有持久化操作提供服务的中枢.Persistence co ...
- thinkjs解决跨域
this.header("Access-Control-Allow-Origin", "*"); 将上面的代码在请求发送之前执行即可 如果不知道放在哪里 可以参 ...
- ZR9.8普转提
ZR9.8普转提 A,B 打过的CF原题,不管了 C 确认过眼神,是我不会写的DP, 发现这个题目要求的过程类似与一个所有括号都不一样的括号匹配的过程 但是限制条件非常多,有点无从下手的感觉 我们设\ ...
- eclipse中部署web项目时报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener的解决方法
解决方案: 1.右键点击项目--选择Properties,选择Deployment Assembly,在右边点击Add按钮,在弹出的窗口中选择Java Build Path Entries 2.点击N ...
- $hncpc2019E\ Numbers$ 搜索
正解:搜索 解题报告: 传送门$QAQ$ 考虑直接搜所有长度为1的数的位置?然后其他就能确定了嘛$QwQ$ 设每个数的出现次数为$a_i$,状态数为$\prod_{i=0}^9(a_i+1) \le ...
- $loj\ 2031\ [SDOI2016]$数字配对 网络流
正解:网络流 解题报告: 我永远喜欢$loj$! 显然先预处理哪些$a$之间可以连边,然后考虑建两排点,连流量为$c_{i}\cdot c_{j}$,然后$ST$连$inf$,跑个费用流? 然后现在碰 ...