1. 集合的定义

什么是集合呢?

定义:集合是一个存放对象的引用的容器。

在Java中,集合位于java.util包下。

2. 集合和数组的区别(面试常问)

提到容器,就会想起数组,那么集合和数组的区别是什么呢?(这里是重点,面试可能问的比较多)

数组和集合都是Java中的容器

数组的长度是固定的,集合的长度是可变的

数组只能存储相同数据类型的数据,这里的数据类型可以是基本数据类型,也可以是引用类型

集合可以存储不同数据类型的对象的引用(但一般情况下,我们会使用泛型来约定只使用1种数据类型),但不能存储基本数据类型

空口无凭,我们来点代码配合理解,首先,我们看下如下的数组代码:

String[] platformArray = new String[3];

platformArray[0] = \"博客园\";

platformArray[1] = \"掘金\";

platformArray[2] = \"微信公众号\";

platformArray[3] = \"个人博客\";

运行代码就会发现,platformArray[3] = \"个人博客\";会引发java.lang.ArrayIndexOutOfBoundsException异常。

而使用集合时就不存在这个问题,因为集合在声明时不需要指定长度并且长度会根据放入元素的多少而变化:

List platformList = new ArrayList<>();

platformList.add(\"博客园\");

platformList.add(\"掘金\");

platformList.add(\"微信公众号\");

platformList.add(\"个人博客\");

观察上面声明数组的代码,我们可以推断出下面的代码肯定是编译不通过的:

String[] platformArray = new String[3];

platformArray[0] = \"博客园\";

platformArray[1] = \"掘金\";

platformArray[2] = 1;

因为数组声明时用的是String类型,而platformArray[2] = 1;赋值时却使用了int类型。

再来看下下面的集合代码:

List intList = new ArrayList();

intList.add(1);

intList.add(2);

intList.add(3);

这段代码也是编译不通过的,在IDEA中,鼠标悬停时会提示如下的错误信息:

意思是类型参数不能是原始类型(基本数据类型),那怎么使用呢?总不能不让我使用int型的集合吧?

当然不会,Java为每种基本数据类型都提供了对应的包装类,这里修改为int类型对应的包装类Integer即可:

List intList = new ArrayList();

intList.add(1);

intList.add(2);

intList.add(3);

以下为Java的原始类型(基本数据类型)与其对应的包装类:

原始类型(基本数据类型)

包装类

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

3. 集合的分类

在Java中,集合主要分为以下3种:

List集合

Set集合

Map集合

它们之间的继承关系可以参考下图。

从上图可以总结出如下几点:

Java集合的根接口是Collection,它又继承了迭代接口Iterable

List接口和Set接口继承了Collection接口

Map接口是独立的接口,并没有继承Collection接口 (这里是重点,面试可能问的比较多)

List接口常用的实现类有:ArrayList、LinkedList、Vector

Set接口常用的实现类有:HashSet、LinkedHashSet、TreeSet

Map接口常用的实现类有:HashMap、HashTable、TreeMap

4. List集合

List集合包括List接口以及List接口的所有实现类。List集合具有以下特点:

集合中的元素允许重复

集合中的元素是有顺序的,各元素插入的顺序就是各元素的顺序

集合中的元素可以通过索引来访问或者设置

List接口常用的实现类有:ArrayList、LinkedList、Vector。

我们先看下如下示例了解下List集合的用法:

package collection;

import java.util.*;

public class Muster {

public static void main(String[] args) {

List strList = new ArrayList<>();

strList.add(\"a\");

strList.add(\"b\");

strList.add(\"c\");

int i = (int) (Math.random() * strList.size());

System.out.println(\"随机获取数组中的元素:\" + strList.get(i));

strList.remove(2);

System.out.println(\"将索引为2的元素从列表移除后,数组中的元素是:\");

for (int j = 0; j < strList.size(); j++) {

System.out.println(strList.get(j));

}

}

}

以上代码的输出结果为:

随机获取数组中的元素:a

将索引为2的元素从列表移除后,数组中的元素是:

a

b

关于List集合的详细用法,ArrayList、LinkedList、Vector的区别(这里是重点,面试可能问的比较多),后续会单独写文总结,敬请期待。

5. Set集合

Set集合包括Set接口以及Set接口的所有实现类。Set集合具有以下特点:

集合中不包含重复元素(你可以重复添加,但只会保留第1个)

集合中的元素不一定保证有序

Set接口常用的实现类有:HashSet、LinkedHashSet、TreeSet。

我们先看下如下示例了解下Set集合的用法:

package collection;

import java.util.*;

public class Muster {

public static void main(String[] args) {

Set platformList = new HashSet<>();

platformList.add(\"博客园\");

platformList.add(\"掘金\");

platformList.add(\"微信公众号\");

platformList.add(\"个人博客\");

// 尝试添加重复元素

platformList.add(\"博客园\");

platformList.add(\"掘金\");

for (String platform : platformList) {

System.out.println(platform);

}

}

}

以上代码的输出结果为:

博客园

个人博客

掘金

微信公众号

可以看出,虽然我们尝试添加了重复元素,但并没有添加成功并且输出的元素没有顺序。

因此当你的集合中不允许有重复元素并且对排序也没有要求的话,可以使用Set集合。

关于Set集合的详细用法,HashSet、LinkedHashSet、TreeSet的区别(这里是重点,面试可能问的比较多),后续会单独写文总结,敬请期待。

6. Map集合

Map集合包括Map接口以及Map接口的所有实现类。Map集合具有以下特点:

Map接口并没有继承Collection接口,提供的是key到value的映射

Map中不能包含相同的key

Map接口常用的实现类有:HashMap、HashTable、TreeMap。

我们先看下如下示例了解下Map集合的用法:

package collection;

import java.util.*;

public class Muster {

public static void main(String[] args) {

Map platformMap = new HashMap<>();

platformMap.put(1, \"博客园\");

platformMap.put(2, \"掘金\");

platformMap.put(3, \"微信公众号\");

platformMap.put(4, \"个人博客\");

// 尝试添加重复Map

platformMap.put(4, \"个人博客\");

// 获取所有的key

Set keys = platformMap.keySet();

for (Integer integer : keys) {

System.out.println(\"Key:\" + integer + \",Value:\" + platformMap.get(integer));

}

}

}

以上代码的输出结果为:

Key:1,Value:博客园

Key:2,Value:掘金

Key:3,Value:微信公众号

Key:4,Value:个人博客

从日志可以看出,当我们尝试重加重复Map时,并没有添加成功。

关于Map集合的详细用法,HashMap、HashTable、TreeMap的区别(这里是重点,面试可能问的比较多),后续会单独写文总结,敬请期待。

7. 源码及参考

8. 最后

打个小广告,欢迎扫码关注微信公众号:「申城异乡人」,定期分享Java技术干货,让我们一起进步。

java中集合怎么定义_Java集合系列(一):集合的定义及分类相关推荐

  1. java中list元素排序_java list集合元素根据某些字段排序

    一.jdk1.6的环境下 新建ComparatorSort类,并实现Comparator接口,重写compare方法 降序排序:o1的元素>o2的元素,并返回-1:o1的元素小于o2的元素,并返 ...

  2. [转载] Java中如何引用另一个类里的集合_Java工程师面试题整理

    参考链接: 在Java中将预定义的类名用作类或变量名 花了一星期把学过的都整理一遍 尽量易懂,从基础到框架 最新版大厂面经汇总出炉,持续更新中 汇总完了上传网盘,设计到后端架构师的一切知识 如果没更新 ...

  3. java 中list类型未知_Java集合-List

    Java Collection 在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便.这些接口和类有很多对抽象数据类型操作的A ...

  4. java中数据结构的应用_Java集合入门 (二)常用数据结构和应用场景-数组

    Java极客  |  作者  /  铿然一叶 这是Java极客的第 48 篇原创文章 一.数组的特点 1.数组大小固定 2.一个数组只能存储相同数据类型 3.随机访问性能高 4.存储空间连续,这样可以 ...

  5. java中set的遍历_java中遍历set集合,java中set怎么遍历?

    之前给大家介绍了一下java对set对象进行去重的方法,那么下面接着给大家介绍的就是java中遍历set集合方法的内容,一起来了解一下具体方法吧! java中遍历set的三种方式:对set的遍历 1. ...

  6. java futher多线程_Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap

    概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括: ConcurrentSkipListMap介绍 ConcurrentS ...

  7. java中类型转换的造型_Java总结篇系列:类型转换/造型

    Java中,经常可以遇到类型转换的场景,从变量的定义到复制.数值变量的计算到方法的参数传递.基类与派生类间的造型等,随处可见类型转换的身影.Java中的类型转换在Java编码中具有重要的作用. 首先, ...

  8. java map集合详解_JAVA干货:Map 集合详解

    java.util.Map集合 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value) 2.Map集合中的元素,key和value的数据类型可以相同,也可以 ...

  9. JAVA中哈希表的使用-遍历map集合

    java中哈希表的使用第二例-即将罗马数字转换为整数 代码: class Solution { public int romanToInt(String s) { HashMap<Charact ...

  10. java中什么是数组_JAVA中关于数组的定义

    前些日子,有网友问:在JAVA中 int[] a 这样定义的数组和 int a[] 定义的数组有什么区别? 当时没有细看,直接回复说,在JAVA中,两者是一样的,没有区别. 回头仔细看时,还是稍有区别 ...

最新文章

  1. lua 多条件_【LUA】只需花费你半天时间
  2. 一个Demo学完Android中所有的服务
  3. python中try语句_[转]python 里面 try语句
  4. Spring框架中IoC(控制反转)的原理
  5. Bootstrap CSS 编程规范之语法规范
  6. Python自动控制鼠标中键滚动并截屏保存图像
  7. 【ResNet】ResNet到底在解决一个什么问题呢?
  8. Epoll 的time_out参数引发的cpu占用问题
  9. 《信号与系统》解读 第3章 强大的傅里叶时域频域分析工具-1:深入理解信号的时域与频域,需要从熟悉的声音信号入手
  10. 算法图解:像小说一样有趣的算法入门书
  11. linux系统的unip命令
  12. 江苏省2008年普通高校自主招生入选考生名单公示 - 北大清华版
  13. WordPress社交问答社区主题模板
  14. 使用Python采集京东商品详情数据,并上传到拼多多商城中
  15. Vue组件通信(父传子、子传父、兄弟通信)
  16. 微博数据分析工具限时福利!购买西瓜微数加送会员时长 ,最多加赠1个月!
  17. 狂神Javascript笔记
  18. 互联网晚报 | 10月24日 星期日 | 华为鸿蒙生态建设投入已超500亿;瑞幸门店端扭亏为盈;文旅部要求暂停经营旅游专列业务...
  19. 微信小程序:电商发展蓝图解析
  20. WGS-84引力模型和大地水准面模型

热门文章

  1. 英国学生签(T4)Student Visa
  2. 微软无线鼠标3500滚轮问题
  3. Esper入门介绍及热身(一)
  4. Eclipse查看文件的本地历史记录
  5. Windows下的Nginx的配置使用
  6. 第11.9节 Python正则表达式的贪婪模式和非贪婪模式
  7. 3ds  max中复制、实例和参考的区别
  8. 织梦 wordpress_谁拥有WordPress,以及WordPress如何赚钱?
  9. 解决虚拟机黑屏无法关机问题
  10. 将日文半角片假名转换成全角片假名