集合概述

集合(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接口的共性方法

增加:
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()

我们来看一下具体操作:

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);

最终输出的结果如下:

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

接着我们来看一个比较重要的内容——迭代。

迭代是一个非常重要的概念,相当于数组中的遍历,但是二者还是有一些不同的地方的。

上面总览中介绍了,为了迭代集合中的元素,也就是将集合中的元素全部输出,我们可以进行两种操作。

一种是使用toArray(),另外一种就是iterator() 迭代器的方法。

下面我们来看toArray()的做法。

Collection c = new ArrayList();
c.add("数据结构与算法");
c.add("深入理解计算机系统");
c.add("Linux核心技术"); //其中一种方法是将集合中的元素放入数组中,然后用集合的toString方法输出
Object arr[] = c.toArray();
System.out.println("转成数组中的元素:" + Arrays.toString(arr)); //另外一种方法是遍历数组进行输出,不做概述

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

迭代器的作用:就是用于抓取集合中的元素。

迭代器的方法:
hasNext() 问是否有元素可遍历。如果有元素可以遍历,返回true,否则返回false next() 获取元素 remove() 移除迭代器最后一次返回 的元素。 NoSuchElementException 没有元素的异常。
出现的原因: 没有元素可以被迭代了

使用方法如下:

Iterator it = c.iterator();
while(it.hasNext()) { //hashNext()判断是否有元素可供遍历
System.out.println("集合中的元素:" + it.next());
} //清空迭代器中的元素
while(it.hasNext()) {
it.next();
it.remove();
} System.out.println(c);

输出的结果如下:

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

可见,it.remove删除的仅仅是迭代器中的元素,而不是真正集合中的元素。

以上,就是集合第一节的全部内容。

Java集合(一)——Collection的更多相关文章

  1. Java集合框架Collection

    转自:http://www.cdtarena.com/javapx/201306/8891.html [plain] view plaincopyprint?01.在 Java2中,有一套设计优良的接 ...

  2. java集合 之 Collection和Iterator接口

    Collection是List,Queue和Set接口的父接口,该接口里定义的方法即可用于操作Set集合,也可以用于List和Queue集合.Collection接口里定义了如下操作元素的方法. bo ...

  3. Java集合之Collection接口

    java的集合分为三大接口,分别是Collection,Map,Iterator,集合接口和类在java.util包中,此次主要介绍三大接口之一的Collection接口. 一些Collection允 ...

  4. Java集合之Collection

    Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集 ...

  5. -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器

    集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别?                 A:长度区别                  ...

  6. Java集合(Collection)综述

    1.集合简介 数学定义:一般地,我们把研究对象统称为元素.把一些元素组成的总体叫做集合. java集合定义:集合就是一个放数据的容器,准确的说是放数据对象引用的容器. java中通用集合类存放于jav ...

  7. Java集合之Collection与之子类回顾

    Java学习这么久,打算这几天回顾下java的基本知识点,首先是集合. 一.常用集合类关系图 Collection |___List 有序,可重复 |___ArrayList  底层数据结构是数组,增 ...

  8. java集合框架collection(6)继承结构图

    根据<java编程思想>里面的说法,java集合又叫容器,按照单槽和双槽分为两类,Collection和Map,这两个都是接口. 一.Collection Collection下面又分了三 ...

  9. 《Java基础知识》Java集合(Collection)

    作为一个Developer,Java集合类是我们在工作中运用最多的.最频繁的类.相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求: Java集合就像一个容器,可以存储任何类型的数 ...

  10. JAVA集合框架 - Collection

    collection大致介绍 Collection是集合层次结构中的根接口. 集合表示一组对象.有些集合允许重复元素,有些则不允许.有些是有序的,有些是无序的. JDK没有提供此接口的任何直接实现:它 ...

随机推荐

  1. Window Server 2019 配置篇(4)- 配置WDS实现自动部署服务

    上次我们建立了hyper-v集群,那么我们这次需要对集群内的客户机和外部的服务器进行自动部署,这时候需要WDS服务 WDS服务是一种自动部署服务,能够对无OS的计算机进行操作系统的部署 首先建立虚拟机 ...

  2. Android明密文切换

    前言: 在我们的登录界面经常会遇到查看自己输入密码是否正确,就会用到明密文切换 正文: 我们先写出xml文件文件中的代码,不用过多解释 <EditText android:layout_widt ...

  3. ROM与RAM

    今天小姐姐来问我关于ROM.RAM和Flash的区别,我给她大致的说了一下名称和作用.可人家说她知道这玩意的名字,希望我能够接地气的解释一下什么是ROM.RAM.FLASH…… 这就把我难住了 ≧ ﹏ ...

  4. Windows按键消息—虚拟键码(转)

    源地址:http://c.biancheng.net/cpp/html/1253.html 虚拟键码保存在WM_KEYDOWN.WM_KEYUP.WM_SYSKEYDOWN和WM_SYSKEYUP消息 ...

  5. CSS层级关系 学习笔记

        CSS 文档流   格式化上下文 Formatting Context 即初始元素定义的环境 块格式化上下文  Block Formatting Context BFC 行内格式化上下文   ...

  6. Go语言 使用append() 为切片动态添加元素

    Go语言的内建函数 append() 可以为切片动态添加元素.不过需要注意的是,在使用 append() 函数为切片动态添加元素时,如果空间不足以容纳足够多的元素,切片就会进行“扩容”,此时新切片的长 ...

  7. 三十五、在SAP中定义选择屏幕,设置选择范围

    一.代码如下,有2个地方需要注意,一个是SELECT-OPTIONS,还有一个是IN的使用 二.我们定义一下选择文本 三.我们运行程序 四.输出 五.当然,选择的时候,我们也可以用其他的方式,如下图

  8. .net core项目iis10上出现 HTTP 错误 500.19,错误代码:0x8007000d

    文件权限更改,配置文件更改,IIS重装重启,各种办法都不管用,下面是解决办法: 看错误信息里:模块:IIS Web Core 打开IIS: 模块列表中是否缺少红框里的两个组件(我这是已经安装好的截图) ...

  9. 【BZOJ2400】Optimal Marks

    题意 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有 \(n\) 个结点 \(m\) 条边的无向图.其中的一些点的值是给定的 ...

  10. springMVC上传文件和文件下载

    springMVC.xml文件 <bean id="multipartResolver" class="org.springframework.web.multip ...