Java集合系列(⼀):集合的定义及分类
1. 集合的定义
什么是集合呢?
定义:集合是⼀个存放对象的引⽤的容器。
在Java中,集合位于java.util包下。
2. 集合和数组的区别(⾯试常问)
提到容器,就会想起数组,那么集合和数组的区别是什么呢?(这⾥是重点,⾯试可能问的⽐较多)
1. 数组和集合都是Java中的容器
2. 数组的长度是固定的,集合的长度是可变的
3. 数组只能存储相同数据类型的数据,这⾥的数据类型可以是基本数据类型,也可以是引⽤类型
4. 集合可以存储不同数据类型的对象的引⽤(但⼀般情况下,我们会使⽤泛型来约定只使⽤1种数据类型),但不能存储基本数据类型空⼝⽆凭,我们来点代码配合理解,⾸先,我们看下如下的数组代码:
String[] platformArray = new String[3];
platformArray[0] = "博客园";
platformArray[1] = "掘⾦";
platformArray[2] = "";
platformArray[3] = "个⼈博客";
运⾏代码就会发现,platformArray[3] = "个⼈博客";会引发java.lang.ArrayIndexOutOfBoundsException异常。
⽽使⽤集合时就不存在这个问题,因为集合在声明时不需要指定长度并且长度会根据放⼊元素的多少⽽变化:
List<String> 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<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种:
1. List集合
2. Set集合
3. Map集合
它们之间的继承关系可以参考下图。
从上图可以总结出如下⼏点:
1. Java集合的根接⼝是Collection,它⼜继承了迭代接⼝Iterable
2. List接⼝和Set接⼝继承了Collection接⼝
3. Map接⼝是独⽴的接⼝,并没有继承Collection接⼝(这⾥是重点,⾯试可能问的⽐较多)
4. List接⼝常⽤的实现类有:ArrayList、LinkedList、Vector
5. Set接⼝常⽤的实现类有:HashSet、LinkedHashSet、TreeSet
6. Map接⼝常⽤的实现类有:HashMap、HashTable、TreeMap
4. List集合
List集合包括List接⼝以及List接⼝的所有实现类。List集合具有以下特点:
1. 集合中的元素允许重复
2. 集合中的元素是有顺序的,各元素插⼊的顺序就是各元素的顺序
3. 集合中的元素可以通过索引来访问或者设置
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("随机获取数组中的元素:" + (i));
System.out.println("将索引为2的元素从列表移除后,数组中的元素是:");
for (int j = 0; j < strList.size(); j++) {
System.out.(j));
}
}
}
以上代码的输出结果为:
随机获取数组中的元素:a
将索引为2的元素从列表移除后,数组中的元素是:
a
b
关于List集合的详细⽤法,ArrayList、LinkedList、Vector的区别(这⾥是重点,⾯试可能问的⽐较多),后续会单独写⽂总结,敬请期待。5. Set集合
Set集合包括Set接⼝以及Set接⼝的所有实现类。Set集合具有以下特点:
1. 集合中不包含重复元素(你可以重复添加,但只会保留第1个)
2. 集合中的元素不⼀定保证有序
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的区别(这⾥是重点,⾯试可能问的⽐较多),后续会单独写⽂总结,敬请期待。
6. Map集合
Map集合包括Map接⼝以及Map接⼝的所有实现类。Map集合具有以下特点:
1. Map接⼝并没有继承Collection接⼝,提供的是key到value的映射java arraylist用法
2. Map中不能包含相同的key
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:" + (integer));
}
}
}
以上代码的输出结果为:
Key:1,Value:博客园
Key:2,Value:掘⾦
Key:3,Value:
Key:4,Value:个⼈博客
从⽇志可以看出,当我们尝试重加重复Map时,并没有添加成功。
关于Map集合的详细⽤法,HashMap、HashTable、TreeMap的区别(这⾥是重点,⾯试可能问的⽐较多),后续会单独写⽂总结,敬请期待。
7. 源码及参考

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。