什么是集合呢?html
定义:集合是一个存放对象的引用的容器。java
在Java中,集合位于java.util包下。程序员
提到容器,就会想起数组,那么集合和数组的区别是什么呢?(这里是重点,面试可能问的比较多)面试
空口无凭,咱们来点代码配合理解,首先,咱们看下以下的数组代码:数组
String[] platformArray = new String[3]; platformArray[0] = "博客园"; platformArray[1] = "掘金"; platformArray[2] = "微信公众号"; platformArray[3] = "我的博客";
运行代码就会发现,platformArray[3] = "我的博客";
会引起java.lang.ArrayIndexOutOfBoundsException
异常。微信
而使用集合时就不存在这个问题,由于集合在声明时不须要指定长度而且长度会根据放入元素的多少而变化:dom
List<String> platformList = new ArrayList<>(); platformList.add("博客园"); platformList.add("掘金"); platformList.add("微信公众号"); platformList.add("我的博客");
观察上面声明数组的代码,咱们能够推断出下面的代码确定是编译不经过的:spa
String[] platformArray = new String[3]; platformArray[0] = "博客园"; platformArray[1] = "掘金"; platformArray[2] = 1;
由于数组声明时用的是String类型,而platformArray[2] = 1;
赋值时却使用了int类型。.net
再来看下下面的集合代码:3d
List<int> intList = new ArrayList<int>(); intList.add(1); intList.add(2); intList.add(3);
这段代码也是编译不经过的,在IDEA中,鼠标悬停时会提示以下的错误信息:
意思是类型参数不能是原始类型(基本数据类型),那怎么使用呢?总不能不让我使用int型的集合吧?
固然不会,Java为每种基本数据类型都提供了对应的包装类,这里修改成int类型对应的包装类Integer便可:
List<Integer> intList = new ArrayList<Integer>(); 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集合包括List接口以及List接口的全部实现类。List集合具备如下特色:
List接口经常使用的实现类有:ArrayList、LinkedList、Vector。
咱们先看下以下示例了解下List集合的用法:
package collection; import java.util.*; public class Muster { public static void main(String[] args) { List<String> 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的区别(这里是重点,面试可能问的比较多),后续会单独写文总结,敬请期待。
Set集合包括Set接口以及Set接口的全部实现类。Set集合具备如下特色:
Set接口经常使用的实现类有:HashSet、LinkedHashSet、TreeSet。
咱们先看下以下示例了解下Set集合的用法:
package collection; import java.util.*; public class Muster { public static void main(String[] args) { Set<String> 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的区别(这里是重点,面试可能问的比较多),后续会单独写文总结,敬请期待。
Map集合包括Map接口以及Map接口的全部实现类。Map集合具备如下特色:
Map接口经常使用的实现类有:HashMap、HashTable、TreeMap。
咱们先看下以下示例了解下Map集合的用法:
package collection; import java.util.*; public class Muster { public static void main(String[] args) { Map<Integer, String> platformMap = new HashMap<>(); platformMap.put(1, "博客园"); platformMap.put(2, "掘金"); platformMap.put(3, "微信公众号"); platformMap.put(4, "我的博客"); // 尝试添加剧复Map platformMap.put(4, "我的博客"); // 获取全部的key Set<Integer> 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的区别(这里是重点,面试可能问的比较多),后续会单独写文总结,敬请期待。
Java集合中List,Set以及Map等集合体系详解(史上最全)
原创不易,若是以为文章能学到东西的话,欢迎点个赞、评个论、关个注,这是我坚持写做的最大动力。
若是有兴趣,欢迎添加个人微信:zwwhnly,等你来聊技术、职场、工做等话题(PS:我是一名奋斗在上海的程序员)。
原文出处:https://www.cnblogs.com/zwwhnly/p/11251562.html