treeset

TreeSet

eg:
自定义User类,属性为姓名和年龄。将自定义的User类插入到 TreeSet集合中并实现排序

思路:TreeSet集合自动实现排序的原理是首先要求对象具有可比性,所以User类需要实现Comparable接口
User的两个属性 首先对年龄判断,再对姓名判断

public class User implements Comparable

public int compareTo(Object o) {
if(!(o instanceof User))
{
throw new RuntimeException("不是User对象");
}
User u = (User)o;

System.out.println(this.getName()+"compareto"+u.getName());
if(this.getAge()>u.getAge())
{
return 1;
}
else if(this.getAge()==u.getAge())
{
return(this.getName().compareTo(u.getName()));
//return 0;
}

return -1;

}


TreeSet实现排序的第二种方法 也就是在构造结合时将比较器对象作为参数传入到集合的构造方法当中

public class MyComparator implements Comparator

public int compare(Object o1, Object o2) {
User u1 = (User)o1;
User u2 = (User)o2;
if(!(o1 instanceof User)&& !(o2 instanceof User))
{
throw new RuntimeException("存入的对象不是User类");
}
int num = u1.getName().compareTo(u2.getName());//按姓名为
//第一关键字排序
if(num == 0)//如果姓名是相同的,按年龄作为第二关键字排序,可以考虑将
//年龄包装成Integer类调用其自身的compareto方法
{
return new Integer(u1.getAge()).compareTo(new Integer(u2.getAge()));
}
return num;
}


比较器的好处是用发比较灵活 在开发的过程中使用比较器的方法比较常用
实现对TreeSet排序一般用两种方法
在项目中常使用比较器方法
也就是 自定义一个比较器 要求实现Comparator接口
public class MyComparator implements Comparator
再覆写compare()方法
这种方式比较灵活可以自定义比较器

第二种方式是在构造集合中的类的时候 给类实现comparable接口 让类自身有可比性
需要覆写compareto()方法
public class User implements Comparable
public int compareTo(Object o)


使用场景:
TreeSet 适用于要排序的非重复元素的存放;
基于TreeMap实现,支持排序。
  非线程安全。
C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照和温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性和准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础和电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)​ 内容概要:本文围绕动态环境下多无人机系统的协同路径规划与防撞问题展开研究,提出基于Matlab的仿真代码实现方案。研究重点在于在复杂、动态环境中实现多无人机之间的高效协同飞行与避障,涵盖路径规划算法的设计与优化,确保无人机集群在执行任务过程中能够实时规避静态障碍物与动态冲突,保障飞行安全性与任务效率。文中结合智能优化算法,构建合理的成本目标函数(如路径长度、飞行高度、威胁规避、转弯角度等),并通过Matlab平台进行算法验证与仿真分析,展示多机协同的可行性与有效性。; 适合人群:具备一定Matlab编程基础,从事无人机控制、路径规划、智能优化算法研究的科研人员及研究生。; 使用场景及目标:①应用于灾害救援、军事侦察、区域巡检等多无人机协同任务场景;②目标是掌握多无人机系统在动态环境下的路径规划与防撞机制,提升协同作业能力与自主决策水平;③通过Matlab仿真深入理解协同算法的实现逻辑与参数调优方法。; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注目标函数设计、避障策略实现与多机协同逻辑,配合仿真结果分析算法性能,进一步可尝试引入新型智能算法进行优化改进。
09-18
### TreeSet的使用 TreeSet 是 Java 集合框架中的一部分,实现了 `SortedSet` 接口,可用于存储有序的元素集合。以下是 TreeSet 的基本使用示例: ```java import java.util.TreeSet; public class TreeSetExample { public static void main(String[] args) { TreeSet<Integer> numbers = new TreeSet<>(); numbers.add(3); numbers.add(1); numbers.add(2); for (Integer num : numbers) { System.out.println(num); } } } ``` 上述代码创建了一个存储整数的 TreeSet,并添加了几个元素,最后遍历输出元素。由于 TreeSet 是有序的,输出结果会按元素值从小到大排列。 ### TreeSet的特性 TreeSet 具有以下特性: - **有序性**:TreeSet 会根据元素的实际值的大小进行排序,而不是根据插入顺序排序。其底层通过 TreeMap 实现,使得元素能保持自然顺序或指定的比较顺序[^1]。 - **唯一性**:TreeSet 不允许存储重复元素,添加重复元素时会被忽略。 - **不允许存储 `null` 元素**:因为 TreeSet 需要对元素进行比较排序,`null` 无法参与比较。 ### TreeSet与 `computeIfAbsent` 可能的关联 `computeIfAbsent` 是 `Map` 接口中的方法,而 TreeSet 本身不是 `Map`,但可以结合使用。例如,当需要为每个键关联一个 TreeSet 时,可以使用 `computeIfAbsent` 来确保每个键对应的 TreeSet 只在需要时创建。示例代码如下: ```java import java.util.HashMap; import java.util.Map; import java.util.TreeSet; public class TreeSetComputeIfAbsentExample { public static void main(String[] args) { Map<String, TreeSet<Integer>> map = new HashMap<>(); String key = "group1"; map.computeIfAbsent(key, k -> new TreeSet<>()).add(1); map.computeIfAbsent(key, k -> new TreeSet<>()).add(3); map.computeIfAbsent(key, k -> new TreeSet<>()).add(2); System.out.println(map.get(key)); } } ``` 上述代码中,使用 `computeIfAbsent` 为键 `"group1"` 关联一个 TreeSet,如果该键对应的 TreeSet 不存在则创建一个新的 TreeSet,然后向其中添加元素。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值