首先已知java中任何类都有一个共同的父类,那就是Object类。若定义一个Object类数组,理论上可以涵盖任何类的数据。例如:

public static void main(String[] args) {String str = "Hello World!";Date date = new Date();Integer a = new Integer(16);Object obj[] = {str,date,a};for(Object o:obj)System.out.println(o.toString());
}

例子中的数组就好比一个柜子里面,放着衣服、食物、书、混合在一起放,这样极其不方便且混乱。不如买三个柜子,每个柜子前面都贴个标签,分别为:衣服、食物、书。东西分开放,整齐划一,不会造成混乱。
java中提供了这样的标签,如果说Object类是不能贴标签,可以随便放任何东西的柜子,我们接下来要介绍的Collection类则是可以贴上一个标签,也就是其后的尖括号,然后贴上了这个尖括号标签就只能放这类东西的柜子了。

public static void main(String[] args) {String str = "Hello World!";String _str = "silence wench!";Date date = new Date();Date _date = new Date(date.getTime()+0x10000);Collection<String> strC= new ArrayList<>();Collection<Date> dateC= new ArrayList<>();/*add方法是把某个元素放进容器*//*下面这行代码的作用就是把str放进容器strC*/strC.add(str);strC.add(_str);dateC.add(date);dateC.add(_date);dateC.add(str);//dateC容器中只能存放Date,这里马上报错。
}

这个时候有的好奇宝宝可能就要问了,为什么Collection类的实例化不是这样的嘞。如下:

 Collection<String> strC= new Collection<>();Collection<Date> dateC= new Collection<>();

答案很简单,Collection是接口,不能实例化,而ArrayList是Collection的子类且不抽象。也就是说等号左边和等号右边的两个类名要满足以下条件:
1.等号右边不能是抽象类不能是接口,左边随意。
2.右边必须是左边的子类,或者与左边一样。
而在java容器类的继承树如图所示:
PS:图中除了最后一行的六个类,其他都是抽象类或接口。

从图中我们可以看出Collection的两个子类Set和List,我们来介绍一下这两个类有什么区别。List类似于各种编程语言中的数组,每个元素都是有顺序的,而且完全可以重复。而Set类类似于数学中的集合的概念,具有唯一性和无序性,元素不能重复,且没有顺序。光说理论知识估计你都被我绕进去了,听的云里雾里,我来点实例干货吧。
咱们先别急,下面的例子会用到一些你没见过的方法,这些方法都是Collection类的类方法,如图:

现在看例子

public static void main(String[] args) {Set<String> s = new HashSet<>();List<String> l = new ArrayList<>();String str = "Hello World!";String str1 = "!dlroW olleH";l.add(str);l.add(str);/*List中元素可以重复,所以此时l中有两个Hello World*/s.add(str);s.add(str);s.add(str1);/*Set中元素不可以重复,所以第二次相当于白加了,s中仍然只有一个Hello World,但是编译器不会报错*//*第三次给里面加的是另一个东西,没有重复,就可以加进去*/
}

这个例子解决了List可重复性与Set的不可重复性。
关于List的有序性和Set的无序性。
我们在举一个例子:

public static void main(String[] args) {List<Integer> l = new ArrayList<>();Set<Integer> s = new HashSet<>();l.add(3);l.add(2);l.add(1);System.out.println(l);/*输出:[3, 2, 1]*/s.add(3);s.add(2);s.add(1);System.out.println(s);/*输出:[1, 2, 3]*/}

可以看到List中先add(3),再add(2),最后1,输出也是按照这个顺序:[3, 2, 1]
但是Set的没有顺序之分,所以输出:[1, 2, 3]

快速解决java中的容器相关推荐

  1. java中OOD_还在傻傻分不清?3分钟快速认识Java中的OOA、OOD、OOP

    在计算机专业中,Java专业是最常设的专业之一,在学习Java时,框架是重要的学习内容,你还在傻傻分不清吗?3分钟快速认识Java中的OOA.OOD.OOP.OOA:Object-Oriented A ...

  2. java http请求 乱码_怎么解决java中的http请求乱码

    怎么解决java中的http请求乱码 发布时间:2020-06-23 20:00:11 来源:亿速云 阅读:90 作者:元一 怎么解决java中的http请求乱码?针对这个问题,今天小编总结了这篇文章 ...

  3. 10个问题让你快速避开java中的jdbc常见坑

    摘要:JDBC,即Java Database Connectivity,java数据库连接.是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范. 本文分享自华为云社区<1 ...

  4. java中的容器问题

    小小的总结一下java中的容器问题. 一.三个知识点 1.迭代器 1).java.util.Interator + hasnext(); next(); remove(); 2).java.lang. ...

  5. 解决java中对URL编码的问题

    解决java中对URL编码的问题 参考文章: (1)解决java中对URL编码的问题 (2)https://www.cnblogs.com/a198720/p/4210763.html 备忘一下.

  6. 解决java中使用getImage()导入图片失败问题

    解决java中使用getImage()导入图片失败问题 在使用getImage(fileName)方法导入图片时,一直失败.后来加入相对路径解决找不到图片问题. 代码如下 image = Toolki ...

  7. 如何快速解决Unity中万向节死锁(gimbal lock)的问题

    如何快速解决Unity中万向节死锁(gimbal lock)的问题 转载连接:https://www.jianshu.com/p/59acdd1c9db8 万向节死锁的根本问题是欧拉角(EulerAn ...

  8. java字符乱码问题_怎么解决java中的字符乱码问题

    怎么解决java中的字符乱码问题 发布时间:2020-06-28 14:53:09 来源:亿速云 阅读:108 作者:Leah 怎么解决java中的字符乱码问题?相信很多没有经验的人对此束手无策,为此 ...

  9. java 插入 mysql 乱码_解决java中插入mysql中文乱码的方法

    解决java中插入mysql中文乱码的方法 发布时间:2020-07-11 14:35:11 来源:亿速云 阅读:100 作者:清晨 这篇文章主要介绍解决java中插入mysql中文乱码的方法,文中介 ...

最新文章

  1. 数据丢包怎么修复_交换机发生网络通信故障怎么解决?
  2. c语言判断一个分数是不是最简分数_青岛版六年级数学上册7.2小数、分数和百分数的互化微课视频 | 练习...
  3. 用 Nginx 基于 Let's Engypt 免费证书打造快速安全的 HTTPS 网站
  4. Python的功能模块[3] - binascii - 编码转换
  5. mysql将sql转为关系代数_关系数据库基础:关系代数运算知识笔记
  6. 织梦手机版list.php,解决织梦一级目录作域名list.php无法跳转到手机站的问题
  7. 二、项目运行环境【PMP 】
  8. java中的流程控制_Java中的流程控制
  9. mysql 字段操作_Mysql:数据库操作、数据表操作、字段操作整理
  10. ​对比学习还能这样用:字节推出真正的多到多翻译模型mRASP2
  11. layui 图片展示添加一个x_Layx 演示示例
  12. 蓝牙uuid是什么意思_小公主的吐槽非常好|米家蓝牙温湿度计2
  13. Docker教程小白实操入门(20)--如何删除数据卷
  14. 知识图谱-命名实体-关系-免费标注工具-快速打标签-Python3
  15. UE4 Slate七 Slate本地化, UE4编辑器如何做的本地化
  16. 理解不够,还是不够专业?程序员与架构师之间的联系
  17. 核心人才的管理方式(领导者必读)
  18. com.android.dazhihui,大智慧
  19. 7.volatile怎么通过内存屏障保证可见性和有序性?
  20. 误删除Linux下/etc/shadow文件,linux修改密码出现Authentication token manipulation error的解决办法

热门文章

  1. android基础-fragment添加使用getSupportFragmentManage
  2. 在Centos7下源代码安装配置Nginx
  3. html 、css、js动态文字时钟
  4. 企业如何避免项目失败
  5. vue js判断长按触发及手指的上滑、下滑、左滑、又滑
  6. 音视频编解码 文件格式 协议内容详解
  7. 从loser到产品大牛,你经历的我都经历了
  8. Android studio 学生信息录入表(课堂作业)
  9. 科学心理学类毕业论文文献有哪些?
  10. 【嵌入式Linux开发一路清障-连载01】Ubuntu22.04启动U盘制作及系统安装与配置