前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java集合(一)——Collection

Java集合(一)——Collection

作者头像
roobtyan
发布2019-02-21 15:52:09
5920
发布2019-02-21 15:52:09
举报

集合概述

集合(Collections)是存储对象的容器。方便对多个对象的操作、存储对象,集合的作用就在这时显现了。 集合的出现就是为了持有对象。集合中可以存储任意类型的对象, 而且长度可变。在程序中有可能无法预先知道需要多少个对象, 那么用数组来装对象的话, 长度不好定义, 而集合解决了这样的问题。

1. 集合和数组的异同点 相同点: 数组和集合类都是容器 不同点: 数组长度是固定的,集合长度是可变的 数组中可以存储基本数据类型,集合只能存储对象 数组中的元素与元素之间的内存地址是连续的,集合的元素的内存地址可以不连续 数组中存储数据类型是单一的,集合中可以存储任意类型的对象 **注意:**Object类型的数组可以存储任意类型的数组 2. 集合类的特点 用于存储对象,长度是可变的,可以存储不同类型的对象。 3. 集合架构 集合的用法十分简单,无外乎增删改查,不过需要注意的一点是:集合和数组中存放的对象都是对象的引用而不是对象本身。 接下来我们来看看集合的具体框架:

这里写图片描述
这里写图片描述

这些集合容器的底层都是由各种数据结构实现的。 4. 这么多种类的集合何时使用呢?

集合种类

使用情况

Collection

我们需要保存若干个对象的时候使用集合

List

如果我们需要保留存储顺序, 并且保留重复元素, 使用List;如果查询较多, 那么使用ArrayList;如果存取较多, 那么用LinkedList;如果需要线程安全, 那么使用Vector

Set

如果我们不需要保留存储顺序, 并且需要去掉重复元素, 使用Set;如果我们需要将元素排序, 那么使用TreeSet如果我们不需要排序, 使用HashSet, HashSet比TreeSet效率高;如果我们需要保留存储顺序, 又要过滤重复元素, 那么使用LinkedHashSet

了解了这么多的基本知识之后,就一起进入集合的学习吧!

集合类(Collection)

Collection接口有两个子接口:

  • List(链表|线性表)
  • Set(集)

特点:

  • Collection中描述的是集合共有的功能(CRUD)
  • List可存放重复元素,元素存取是有序的
  • Set不可以存放重复元素,元素存取是无序的

1. Collection接口的共性方法

代码语言:javascript
复制
增加:
        1:add() 将指定对象存储到容器中
                    add 方法的参数类型是Object 便于接收任意对象
        2:addAll() 将指定集合中的元素添加到调用该方法的集合中
删除:
        3:remove() 将指定的对象从集合中删除
        4:removeAll() 将指定集合中的元素删除
修改
        5:clear() 清空集合中的所有元素
判断
        6:isEmpty() 判断集合是否为空
        7:contains() 判断集合何中是否包含指定对象

        8:containsAll() 判断集合中是否包含指定集合
                            使用equals()判断两个对象是否相等  
获取:   9:int size()    返回集合容器的大小

转成数组10: toArray()   集合转换数组

迭代
        11:toArray() 
        12:iterator() 

我们来看一下具体操作:

代码语言:javascript
复制
Collection c = new ArrayList();
c.add("数据结构与算法");
c.add("深入理解计算机系统");
c.add("Linux核心技术");
System.out.println("添加成功吗?"+c.add("图解HTTP"));

//创建集合
Collection c2 = new ArrayList();
c2.add("人性的弱点");
c2.add("追风筝的人");
c2.add("白夜行");

// 添加方法
c.addAll(c2); // 把c2的元素的添加到c集合 中去。
System.out.println("查看元素个数:"+c.size());
System.out.println("集合的元素:"+ c);

// 判断方法
System.out.println("集合是否为空?" + c.isEmpty());
System.out.println("c中是否含有元素“深入理解计算机系统”?" + c.contains("深入理解计算机系统"));
System.out.println("c中是否含有c2中全部元素?" + c.containsAll(c2));

// 删除方法:
//c.clear(); //clear()清空集合中的元素
System.out.println("删除成功吗?"+c.remove("白夜行"));  // remove 指定集合中的元素删除,删除成功返回true,删除失败返回false.
c.removeAll(c2); //删除c集合中与c2的交集元素。

System.out.println("查看元素个数:"+c.size());
System.out.println("集合的元素:"+ c);

c.retainAll(c2); //保留c集合与c2的交集元素,其他的元素一并删除。

System.out.println("查看元素个数:"+c.size());
System.out.println("集合的元素:"+ c);

最终输出的结果如下:

代码语言:javascript
复制
添加成功吗?true
集合的元素:[数据结构与算法, 深入理解计算机系统, Linux核心技术, 图解HTTP, 人性的弱点, 追风筝的人, 白夜行]
删除成功吗?true
集合的元素:[数据结构与算法, 深入理解计算机系统, Linux核心技术, 图解HTTP]
查看元素个数:0
集合的元素:[]

接着我们来看一个比较重要的内容——迭代。 迭代是一个非常重要的概念,相当于数组中的遍历,但是二者还是有一些不同的地方的。 上面总览中介绍了,为了迭代集合中的元素,也就是将集合中的元素全部输出,我们可以进行两种操作。 一种是使用toArray(),另外一种就是iterator() 迭代器的方法。 下面我们来看toArray()的做法。

代码语言:javascript
复制
Collection c = new ArrayList();
c.add("数据结构与算法");
c.add("深入理解计算机系统");
c.add("Linux核心技术");

//其中一种方法是将集合中的元素放入数组中,然后用集合的toString方法输出
Object arr[] = c.toArray();
System.out.println("转成数组中的元素:" + Arrays.toString(arr));

//另外一种方法是遍历数组进行输出,不做概述

下面我们来看用迭代器操作的方法:

代码语言:javascript
复制
迭代器的作用:就是用于抓取集合中的元素。

迭代器的方法:
    hasNext()   问是否有元素可遍历。如果有元素可以遍历,返回true,否则返回false 

    next()    获取元素


    remove()  移除迭代器最后一次返回 的元素。


NoSuchElementException 没有元素的异常。 
出现的原因: 没有元素可以被迭代了

使用方法如下:

代码语言:javascript
复制
Iterator it = c.iterator();
while(it.hasNext()) {   //hashNext()判断是否有元素可供遍历
    System.out.println("集合中的元素:" + it.next());
}

//清空迭代器中的元素
while(it.hasNext()) {
    it.next();
    it.remove();
}

System.out.println(c);

输出的结果如下:

代码语言:javascript
复制
集合中的元素:数据结构与算法
集合中的元素:深入理解计算机系统
集合中的元素:Linux核心技术
[数据结构与算法, 深入理解计算机系统, Linux核心技术]

可见,it.remove删除的仅仅是迭代器中的元素,而不是真正集合中的元素。 以上,就是集合第一节的全部内容。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年02月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 集合概述
  • 集合类(Collection)
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档