本节目标
- 了解什么是集合框架
- 了解学习集合框架的意义
- 掌握集合框架相关接口和常见的实现类
- 了解下一阶段要学习的内容
1. 介绍
官方教程
Java 集合框架 Java Collection Framework
,又被称为容器 container
,是定义在 java.util
包下的一组接口 interfaces
和其实现类 classes
。
其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD 。
C:create,向数据库插入一条记录;
R:read,查询数据库记录;
U:update,修改数据库记录;
D:delete,删除数据库记录。
例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)、一个通讯录(一组姓名和电话的映射关系)等等。
类和接口总览
Map、Set、List是否有序?
首先我们应该清楚这个概念:这里的有序和无序不是指集合中的排序,而是是否按照元素添加的顺序来存储对象。
list是按照元素的添加顺序来存储对象的,因此是有序的。他的实现类ArrayList、LinkedList、Vector都是有序的。
Map是无序的,它的存储结构是哈希表<key,value>键值对,map中插入元素是根据key计算出的哈希值来存储元素的,因此他不是按照元素的添加顺序来存储对象的,所以Map是无序的。它的实现类有:HashMap、TableMap和TreeMap。
其中LinkedHashMap是有序的,hashMap用来保证存储的值键值对,list用来保证插入的顺序和存储的顺序一致。
Set是无序的,并且set中的元素不能重复。set的底层实现其实是Map,它是计算key的哈希值来确定元素在数组中的存放位置,所以是无序的,应为在Map中key的值不能重复,所以set中的元素不能重复。它的实现类有:haseSet、TreeSet。
其中LinkedHashSet是有序的,其中haseSet用来保证数据唯一,List用来保证插入的顺序和存储的顺序一致。
————————————————
版权声明:本文为CSDN博主「hust_yfang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hust_yfang/article/details/79607138
面试题示例:
which statement is true for the class java.util.ArrayList?
A.集合中的元素是有序的 对
B.集合被保证为不可变的 错
C.集合中的元素被保证为唯一的 错 有序的 所以不唯一
D.集合中的元素使用一个唯一的键来存取 错 没有键
E.集合中的元素被保证为同步的 错 不是同步的
2. 学习的意义
2.1 Java 集合框架的优点及作用
- 使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码
- 学习背后的数据结构知识,有助于我们理解各个集合的优缺点及使用场景
2.2 笔试及面试题
腾讯-Java后台开发面经
1. HashMap 了解不,介绍一下,如果一个对象为 key 时,hashCode 和 equals 方法的用法要注意什么?
2. HashSet 和 HashMap 的区别是什么?
3. HashMap 是线程安全的么?那需要线程安全需要用到什么?
阿里巴巴-Java后台开发面经
1. ArrayList 和 LinkedList 的区别是什么?
2. 有了解过 HashMap 的具体实现么?
3. HashMap 和 ConcurrentHashMap 哪个效率更高?
今日头条-Java后台开发面经
1. 编程题:判断一个链表是否是一个回文链表。
2. Redis 的 zset 类型对应到 java 语言中大致是什么类型?
3. hashCode 主要是用来做什么用的?
3. 接口 interfaces
3.1 基本关系说明
- Collection :用来存储管理一组对象 objects ,这些对象一般被成为元素 elements
- Set : 元素不能重复,背后隐含着查找/搜索的语义
- SortedSet : 一组有序的不能重复的元素
- List : 线性结构
- Queue : 队列
- Deque : 双端队列
- Set : 元素不能重复,背后隐含着查找/搜索的语义
- Map : 键值对 Key-Value-Pair ,背后隐含着查找/搜索的语义
- SortedMap : 一组有序的键值对
3.2 Collection 接口说明
3.3 Collection 常用方法说明
3.4 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
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("hello");
collection.add("hello2");
System.out.println(collection);
boolean flg = collection.remove("hello");
System.out.println(flg);
System.out.println(collection.size());
Object[] objects = collection.toArray();
//String[] objects = (String[])collection.toArray();
//不建议进行强制类型转换,上一行注释会出现ClassCastException异常。
System.out.println(Arrays.toString(objects));
/*collection.clear();
System.out.println("===================");
System.out.println(collection);
System.out.println(collection.isEmpty());*/
}
//结果为:
[hello, hello2]
true
1
[hello2]
public static void main1(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("hello");
collection.add("hello2");
//collection.add(1);
//尖括号当中 放的类型 一定要是 包装类 不能是简单的基本类型
Collection<Integer> collection2 = new ArrayList<>();
collection2.add(1);
collection2.add(2);
collection2.add(13);
}
注意:不建议进行整体数组的强制类型转换。
如下图,Integer[]
转Object[]
是可行的,但是向下进行整体数组的强制类型转换不可以的。
如下图,String[]
转Object[]
是可行的,但是向下进行整体数组的强制类型转换不可以的。
没有出现编译错误,但会有运行时ClassCastException异常。
3.5 Map 接口说明
3.6 Map 常用方法说明
3.7 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年
标题
狂人日记
public static void main5(String[] args) {
TreeMap<String,String> map2 = new TreeMap<>();
map2.put("及时雨","宋江");
map2.put("国民女神","高圆圆");
System.out.println(map2);
//TreeMap是继承了SotedMap接口是有序的,HashMap是映射关系无序的。
HashMap<String,String> map = new HashMap<>();
map.put("及时雨","宋江");
map.put("国民女神","高圆圆");
System.out.println(map);
}
//结果为:
{
及时雨=宋江, 国民女神=高圆圆}
{
国民女神=高圆圆, 及时雨=宋江}
public static void main4(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("及时雨","宋江");
map.put("国民女神","高圆圆");
System.out.println(map);
System.out.println("====================");
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for( Map.Entry<String, String> entry : entrySet) {
System.out.println("key: "+entry.getKey()+" value:"+entry.getValue());
}
}
//结果为:
{
国民女神=高圆圆, 及时雨=宋江}
====================
key: 国民女神 value:高圆圆
key: 及时雨 value:宋江
public static void main3(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("国民女神","高圆圆");
map.put("及时雨","宋江");
String ret2 = map.get("国民女神");
System.out.println(ret2);
String ret = map.getOrDefault("及时雨","博哥");
System.out.println(ret);
boolean flg = map.containsKey("国民女神2");
System.out.println(flg);
}
//结果为:
高圆圆
宋江
false
Set<>集合类,集合类内部的类型是Map.Entry<String,String>
4. 实现 classes
除此之外,我们还会学习 java 中的栈 Stack
5. 下一阶段
5.1 目标
- 学习集合框架的基本使用
- 学习基本的数据结构知识
- 学习七大基于比较的排序算法
- 学习相关的 java 知识点
5.2 知识点
-
集合框架的使用
- Collection
- List
- ArrayList
- LinkedList
- Stack
- Queue
- PriorityQueue
- Deque
- Set
- HashSet
- TreeSet
- Map
- HashMap
- TreeMap
- Collections
-
数据结构的理论及实现
- 顺序表
- 链表
- 栈
- 队列
- 二叉树
- 堆
-
排序算法
- 插入排序
- 希尔排序
- 选择排序
- 堆排序
- 冒泡排序
- 快速排序
- 归并排序
-
Java 语法
- 泛型 Generic
- 自动装箱 autobox 和自动拆箱 autounbox
- Object 的 equals 方法
- Comparable 和 Comparator 接口
内容重点总结
Java 集合框架中接口、之间的关系及其含义
Java 集合框架中接口和其各自对应的常见实现类之间的关系
下一阶段的主要课程内容