TreeSet:
使用TreeSet存储自定义学生对象,并且使用比较器排序,使学生按照年龄长短进行排序
//创建集合对象
//创建学生对象
//将学生对象添加到集合中
//遍历集合
使用TreeSet存储自定义学生对象,并且使用比较器排序,使学生按照年龄长短进行排序(匿名内部类的方式实现)
集合继承体系:
Collection(接口)
-- List:允许元素重复,且有序(存储和取出顺序一致)(接口)
-- ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
-- Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低
-- LinkedList
底层数据结构是双链表,查询慢,增删快
线程不安全,效率高
List相关集合特点:
1、存在索引下标的概念,可以通过get()方法,通过索引获取集合中的元素
2、存储的元素和取出的顺序一致
-- Set:元素唯一,且无序(存储和取出的顺序不能保证)(接口)
-- HashSet
底层数据结构是哈希表(元素是以链表节点的形式存在)
哈希表保证了元素的唯一性
线程不安全,效率高
-- LinkedHashSet
底层数据结构是双链表和哈希表共同决定的
哈希表保证元素的唯一性
双链表保证元素的顺序
-- TreeSet
底层数据结构是红黑树(自平衡二叉树)
提供了两种排序方案:
1)自然排序
要求元素类实现Comparable<T>接口,并重写compareTo()方法
2)比较器排序
实现起来有两种方式,第一种是写具体的子类实现Comparator<T>接口,并重写compare(..,..)方法
第二种是匿名内部类当作TreeSet构造方法参数传入。
注意:遍历Collection集合的方式:
1、迭代器遍历
2、增强for循环
3、注意,其中我们说过的get()和size()方法使用普通for循环仅仅适用于List相关集合,因为只有List相关集合才存在索引下标。
Map:
Map接口:
public interface Map<K,V>
将键映射到值的对象。
Map不能包含重复的键。
每个键可以映射到最多一个值。
举例:
<K,V> 键值对
1001 李毅
1002 小虎
1002 李毅(不允许的)
在Map集合中,K的值不能重复
面试题:Map接口与Collection接口的异同?
1、他们都是属于java.util包下的,Map接口与Collection接口属于平级关系,不存在继承关系
2、Map集合中存储的元素都是成对出现的,Map集合中的键是唯一的,值是可以重复,有些书籍把键值对称之为夫妻对
3、Collection集合中的元素都是单独出现的,Collection下Set相关集合元素是唯一的,List相关集合元素是可以重复的。像这样单独出现的元素,称之为光棍。
Map相关集合的方法:
1、添加功能:
V put(K key, V value) 将指定的值与该映射中的指定键相关联(可选操作)。
举例:map.put("1001","小虎");
2、删除功能
void clear() 从该map中删除所有的映射(可选操作)。
V remove(Object key) 如果存在(从可选的操作),从该中删除一个键的映射。
3、判断功能
boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回 true 。
boolean containsValue(Object value) 如果此map将一个或多个键映射到指定的值,则返回 true 。
boolean isEmpty() 如果此map不包含键值映射,则返回 true 。
4、获取功能
V get(Object key) 返回到指定键所映射的值,或 null如果此映射包含该键的映射。
Set<Map.Entry<K,V>> entrySet() 返回此map中包含的映射的Set视图。
Set<K> keySet() 返回此map中包含的键的Set视图。
Collection<V> values() 返回此map中包含的值的Collection视图。
5、长度功能
int size() 返回此map中键值映射的数量。
注意:
api所说的映射指的是一个键值对
Map集合相关的获取功能:
V get(Object key) 返回到指定键所映射的值,或 null如果此映射包含该键的映射。
Set<Map.Entry<K,V>> entrySet() 返回此map中包含的映射的Set视图。
Set<K> keySet() 返回此map中包含的键的Set视图。
Collection<V> values() 返回此map中包含的值的Collection视图。
map集合遍历的方式
方式1:根据键找值
获取所有键的集合 ---> map集合中的keySet()
遍历键的集合,获取到每一个键 ---> 增强for循环/迭代器
根据键找值 ---> map集合中的get()方法
方式2:根据键值对对象找键和值
获取所有键值对对象的集合 //entrySet() 返回此map中包含的映射的Set视图。
遍历键值对对象的集合,获取到每一个键值对对象 //getKey() getValue()
根据键值对对象找键和值
HashMap:
HashMap<String,String>
HashMap<Integer,String>
HashMap<String,Student>
HashMap<Student,String> //为保证去重,在Studets类中重写HashCode()方法和equals()方法
LinkedHashMap:
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
(底层数据结构是哈希表和双链表)
哈希表和链表实现的Map接口,具有可预测的迭代次序。 这种实现不同于HashMap,它维持于所有条目的运行双向链表。
哈希表保证了元素的键的唯一性
双链表保证元素的键的迭代次序
TreeMap:
TreeMap类概述
键是红黑树结构,可以保证键的排序和唯一性
HashMap和Hashtable:
HashMap和Hashtable的区别
1、HashMap中允许null键和null值存在,而Hashtable不允许(键和值都不允许为null)
2、HashMap是线程不安全的,而Hashtable是线程安全的
Collection工具类:
Collections工具类:
static <T> Collection<T> synchronizedCollection(Collection<T> c)
返回由指定集合支持的同步(线程安全)集合。
static <T> List<T> synchronizedList(List<T> list)
返回由指定列表支持的同步(线程安全)列表。
tatic <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
返回由指定地图支持的同步(线程安全)映射。
static <T> Set<T> synchronizedSet(Set<T> s)
返回由指定集合支持的同步(线程安全)集合。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)