谈谈Java的Collection接口

谈谈Collection

前言

这一篇讲的collection接口;首先,集合是用来 存储数据
的,它是基于某种数据结构数据容器。常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。 集合大类分为了Collection和Map
如下图

谈谈Java的Collection接口

Collection

这一篇文章的内容——现在讲下collection,“集合、容器”,用来存储数据的,它是一个 接口
,不能直接实例化使用;只能通过它的子类来完成,从上图来看,Collection分为List和Set,List集合中的元素是有序的、可重复的,而Set集合中的元素是无序的、不能重复的。List集合强调的是有序,Set集合强调的是不重复。下面是它的已知实现类。

谈谈Java的Collection接口

Collection是描述所有序列容器的共性的根接口,可能会被认为是一个附属接口,即因为要表示其他若干个接口的共性而出现的接口。同时为什么要将其作为接口?是因为可以使我们能够创建更通用的代码。通过针对接口而非具体实现来编写代码,这样,才可以更好地应用于更多的对象类型。

下面的是Collection更加仔细一点的分类。今天这篇重点介绍一下Collection的几个方法,掌握了这些,对于它的子类都是可以直接拿来用的。子类的介绍后面再总结出来。

方法

遇到一些自己不熟的知识点,在IDEA上可以直接查看该接口的详细源码(ctrl加鼠标左键),点开旁边的结构图按钮,可以直观得去查看这些方法

谈谈Java的Collection接口

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;会返回两种错误。

谈谈Java的Collection接口

4.boolean isEmpty()

用来检查集合中是否为空,如果为空就返回true。

5.Iterator iterator()

返回一个Iterator 迭代器,这个方法是用来遍历集合中的元素的,在一些需要获取集合中的元素(包括打印输出,调用等场景下),依赖于集合而存在的,有next方法和hasNext方法。

谈谈Java的Collection接口

这两个方法一般情况下都是 绑定一起用的
。形式如下。

//其主要的用法如下,遍历的功能
//通过集合对象获取迭代器对象
Iterator i = 集合.iterator();
//hasNext方法是布尔型的返回值,有元素在集合里面的时候就会返回true
while(it.hasNext()){
    System.out.println(it.next());
}

6.int size()

用来返回的集合的 长度
,也就是集合里面的元素的个数。

//直接使用,返回长度
集合.size();

7.Boolean remove()

用来 删除
集合中的元素,对象,只要有移除动作就会返回true。

总结

什么是可选操作

在看源码的时候,会发现有些方法在后面会标记为可选操作 (optional operation)。

谈谈Java的Collection接口

执行各种不同的添加和移除的方法在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接口

原文 

http://www.cnblogs.com/yhycoder/p/12209198.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 谈谈Java的Collection接口

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址