介绍
Collection接口以及其衍生
集合是什么?
简单点来说就是封装好的数据结构
1
来看一张图,需要大家将里面的关系理清楚:
各个颜色的分类:(分三种)
三者之间的关系已经箭头的指向都要梳理清楚,如下图所示:
Collection是集合的意思,用于存储"单个"元素,即将单个"元素"挨个一条一条存储,
有三个接口扩展了(extends)了Collection接口,分别是List接口,Queue接口,以及Set接口
实现List接口的实现类一般都是顺序表(ArrayList),链表(LinkedList)
实现Queue接口的实现类有LinkedList以及PriorityQueue
所以说LinkedList既可以被当作链表使用,也可以被当作队列和双向队列使用
实现Set接口的实现类有TreeSet和HashSet.
今后我们需要重点掌握的就是List接口,Queue接口,以及Set接口
List接口:线性结构
Queue接口:队列
Set接口:数学意义上的集合,元素不能重复(重复的元素算一个),背后隐含着查找/搜索的语义
Deque接口:双端队列
SortedSet接口:一组有序的不能重复的元素
总结:需要重点理清两个点:
1:接口与接口,类与接口的关系
2:每一个具体的实现类到底实现了哪些接口
我们需要重点掌握的接口实现类是:Stack,ArrayList,LinkedList,HashSet,PriorityQueue,TreeSet
Vector很少用了,基本都用Stack代替
Map接口以及其衍生
Map接口与Collection接口不同的是,Map接口用于存储键值对
来看一张图:
Map接口有两个实现类,其中HashMap和TreeMap都是需要重点掌握的
SortedMap接口:一组有序的键值对
每个接口实现类代表的含义
总的来说这些接口实现类封装好了我们所知道的数据结构的功能,让我们直接拿来使用即可.
总结
集合有很多,为什么?
答:因为集合背后都是数据结构。
描述和组织数据的方式不一样造就了有这么多的数据结构也就是为什么有这么多的集合。
关于集合的注意事项:
只要是集合,里面存储的元素就一定是引用类型,既然是引用类型,那么比较相等的时候就一定要用equals
学习的意义
java集合框架的优点和作用
使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码
学习背后的数据结构知识,有助于我们理解各个集合的优缺点及使用场景
往年理解公司的笔试面试题概览
Collection接口
Collection官方文档(戳我)
常用方法
Collection示例
import java.util.Collection; import java.util.ArrayList; import java.util.Arrays; public class Demo { public static void main(String[] args) { Collection<String> list = new ArrayList<>(); System.out.println(list.size()); System.out.println(list.isEmpty()); list.add("我"); list.add("爱"); list.add("Java"); System.out.println(list.size()); System.out.println(list.isEmpty()); Object[] array = list.toArray(); System.out.println(Arrays.toString(array)); for (String s : list) { System.out.println(s); } list.remove("爱"); for (String s : list) { System.out.println(s); } list.clear(); System.out.println(list.size()); System.out.println(list.isEmpty()); } }
运行结果:
0 true 3 false [我, 爱, Java] 我 爱 Java 我 Java 0 true
Map接口
Map官方文档(戳我)
Map常用方法
Map代码示例
import java.util.Map; import java.util.HashMap; public class Demo { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); System.out.println(map.size()); System.out.println(map.isEmpty()); System.out.println(map.get(" 作 者 ")); System.out.println(map.getOrDefault("作者", "佚名")); System.out.println(map.containsKey(" 作 者 ")); System.out.println(map.containsValue(" 佚 名 ")); map.put("作者", "鲁迅"); map.put("标题", "狂人日记"); map.put("发表时间", "1918年"); System.out.println(map.size()); System.out.println(map.isEmpty()); System.out.println(map.get(" 作 者 ")); System.out.println(map.getOrDefault("作者", "佚名")); System.out.println(map.containsKey(" 作 者 ")); System.out.println(map.containsValue("佚名")); for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey()); System.out.println(entry.getValue()); } } }
运行结果:
0 true null 佚名 false false 3 false 鲁迅 鲁迅 true false 作者 鲁迅 发表时间 1918年 标题 狂人日记