Java集合---Set详解
2022/2/11 22:43:08
本文主要是介绍Java集合---Set详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Set的说明
存储无序的,不可重复的元素,Set中常用的方法都是Collection下定义的。这里面的顺序是无序,但不是随机排序的。其中的不可重复性,当向Set中添加进相同的元素的时候,后面的这个不能添加进去。要求添加进Set中元素所在的类,一定要重写equals()和hashCode()方法,进而保证元素添加的不可重复性。
Set中元素的存储方式
当向Set中添加对象时,首先调用此对象所在类的hashCode()方法计算此对象的哈希值,此哈希值决定了此对象在Set中的存储位置,若此位置之前没有对象存储,则这个对象直接存储到此位置。若此位置已有对象存储。再通过equals()比较这两个对象是否相同。如果相同,后一个对象就不能再添加进来。
LinkedHashSet的特点
使用链表,维护了一个添加进集合中的顺序,导致当我们遍历LinkedHashSet集合元素时,是按照添加进去的顺序遍历的。
TreeSet
- 向TreeSet中添加的元素必须是同一个类的。
- 可以按照添加进集合中的元素的指定的顺序进行遍历。像String,包装类等默认按照从小到大的顺序遍历。
- 当自定义类没有实现Comparable接口时,当向TreeSet中添加自定义对象时,会报错。
- 当向TreeSet中添加自定义类对象的时候,依据Comparable接口中的compareTo()方法确定按照哪个属性进行排列。
- 当向TreeSet中添加元素时,首先按照compareTo()方法进行比较,一旦返回0,虽然仅是两个对象的子属性值相同,但仍然认为这两个对象相同,进而后面的元素对象无法添加进来
- 当向TreeSet中添加自定义类对象的时候,有两种排序方法:
- 自然排序
要求自定义类实现Comparable接口并实现compareTo()方法,在这个方法中指明按照自定义类的哪个属性进行排序。 - 定制排序
定制排序代码实现
import java.util.Comparator; import java.util.HashSet; import java.util.TreeSet; public class TestSet { public static void main(String[] args) { //1.创建一个实现了Comparator接口的类对象 Comparator comparator = new Comparator() { //向TreeSet中添加Customer对象,在此方法中指明是按照Customer的哪个属性排序的 @Override public int compare(Object o1, Object o2) { if (o1 instanceof Customer && o2 instanceof Customer) { Customer c1 = (Customer) o1; Customer c2 = (Customer) o2; int i = c1.getName().compareTo(c2.getName()); if (i == 0) { return c1.getAge().compareTo(c2.getAge()); } else { return i; } } return 0; } }; //2.将此对象作为形参传递给TreeSet的构造器中 TreeSet set = new TreeSet(comparator); set.add(new Customer("AA", 103)); set.add(new Customer("BB", 102)); set.add(new Customer("GG", 104)); set.add(new Customer("CC", 101)); set.add(new Customer("CC", 107)); for (Object object : set) { System.out.println(object); } } }
运行结果
这篇关于Java集合---Set详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求