集合框架的练习

本文介绍了一种使用HashSet和TreeSet去除数组重复元素并排序的方法,同时提供了一种利用HashMap统计字符串中各字符出现频率的技术方案。
1.给定任意int一维数组
a.去掉数组中的重复元素
b.给数组排序

思路1:因为HashSet集合中的元素不允许重复,所以可以将得到的任意数组放进
Hsahset中,再把HashSet中的元素放到一个新建的数组中,对数组进行冒泡排序(当然其他排序也可以),这样就可以得到我们所需要的结果。

思路1优化:将数组放进TreeSet(TreeSet可以自然排序),于是就可以省去冒泡排序这一步。


2.给定任意字符串String str = "sadsadljsaljdlsajdlsajdlsajd";
统计字符串中每个字符出现的次数

思路1:因为HashMap中的K是不能Set类型的,不能重复,V是可以重复的。所以我们可以将字符作为K,次数作为V,字符和数组的键值形成映射。取出字符串中的每一个字符。然后判断map中是否出现过这个字符。将字符和次数分别放入map中。

优化思路:利用三目运算符来判断

代码如下:

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class Test {

public static void main(String args[]) {
//定义任一数组
int array[] = { 3, 5, 4, 2, 1, 2, 3, 4, 1 };

Test t = new Test();
//调用方法,返回数组类型的值
int[] arr = t.paixu2(array);
//加强for循环的遍历
for (int num : arr) {
System.out.print(num + "\t");
}
//定义任一字符串
String str = "abbcccddddeeeeeffffff";
//调用方法,返回值类型
HashMap<Character, Integer> map = t.count(str);
//HashSet的遍历一定要会
Set<Character> set = map.keySet();
for (char c : set) {
//得到次数
int count = map.get(c);
System.out.println(c + "出现次数:" + count);
}

}

/**
* 对传入的数组去掉重复元素,并且排序 HashSet是不允许存在重复元素的
*
* @param array
* 要处理的数组
* @return 返回去掉重复排好序之后的数组
*/
public int[] paixu(int[] array) {
HashSet<Integer> set = new HashSet<Integer>();
for (int i = 0; i < array.length; i++) {
set.add(array[i]);
}
// 定义新数组,长度就是set中的元素个数
int[] arr = new int[set.size()];
int k = 0;
for (int num : set) {
arr[k] = num;
k++;
}

// 冒泡排序
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}

}

}

return arr;
}
//排序
public int[] paixu2(int[] array) {

TreeSet<Integer> set = new TreeSet<Integer>();
for (int i = 0; i < array.length; i++) {
set.add(array[i]);
}
// 定义新数组,长度就是set中的元素个数
int[] arr = new int[set.size()];
int k = 0;
for (int num : set) {
arr[k] = num;
k++;
}
return arr;
}

/**
* 统计指定字符串中每个字符出现的次数
*
* @param str
* 要统计的字符串
* @return 返回 字符-->次数的键值对 映射
*/
public HashMap<Character, Integer> count(String str) {

HashMap<Character, Integer> map = new HashMap<Character, Integer>();

// 遍历字符串,取出字符
for (int i = 0; i < str.length(); i++) {
//得到字符串中的每个字符
char c = str.charAt(i);
Integer num = map.get(c);

// //如果map中出现过这个字符,表示该字符已经在前面被统计过了
// if(map.containsKey(c)){
// int count = map.get(c);
// count++;
// map.put(c, count);
// }else{
// //如果没有出现,表示是第一次统计到
// map.put(c, 1);
// }

//方法二
num = null == num ? 1 : ++num;
map.put(c, num);

}
return map;
}

}
基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制方法。通过结合数据驱动技术与Koopman算子理论,将非线性系统动态近似为高维线性系统,进而利用递归神经网络(RNN)建模并实现系统行为的精确预测。文中详细阐述了模型构建流程、线性化策略及在预测控制中的集成应用,并提供了完整的Matlab代码实现,便于科研人员复现实验、优化算法并拓展至其他精密控制系统。该方法有效提升了纳米级定位系统的控制精度与动态响应性能。; 适合人群:具备自动控制、机器学习或信号处理背景,熟悉Matlab编程,从事精密仪器控制、智能制造或先进控制算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①实现非线性动态系统的数据驱动线性化建模;②提升纳米定位平台的轨迹跟踪与预测控制性能;③为高精度控制系统提供可复现的Koopman-RNN融合解决方案; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注Koopman观测矩阵构造、RNN训练流程与模型预测控制器(MPC)的集成方式,鼓励在实际硬件平台上验证并调整参数以适应具体应用场景。
提供了一套完整的基于51单片机的DDS(直接数字频率合成)信号波形发生器设计方案,适合电子爱好者、学生以及嵌入式开发人员学习实践。该方案详细展示了如何利用51单片机(以AT89C52为例)结合AD9833 DDS芯片来生成正弦波、锯齿波、三角波等多种波形,并且支持通过LCD12864显示屏直观展示波形参数或状态。 内容概述 源码:包含完整的C语言编程代码,适用于51系列单片机,实现了DDS信号的生成逻辑。 仿真:提供了Proteus仿真文件,允许用户在软件环境中测试整个系统,无需硬件即可预览波形生成效果。 原理图:详细的电路原理图,指导用户如何连接单片机、DDS芯片及其他外围电路。 PCB设计:为高级用户准备,包含了PCB布局设计文件,便于制作电路板。 设计报告:详尽的设计文档,解释了项目背景、设计方案、电路设计思路、软硬件协同工作原理及测试结果分析。 主要特点 用户交互:通过按键控制波形参数,增加了项目的互动性实用性。 显示界面:LCD12864显示屏用于显示当前生成的波形相关参数,提升了项目的可视化度。 教育价值:本资源非常适合教学自学,覆盖了DDS技术基础、单片机编程硬件设计多个方面。 使用指南 阅读设计报告:首先了解设计的整体框架技术细节。 环境搭建:确保拥有支持51单片机的编译环境,如Keil MDK。 加载仿真:在Proteus中打开仿真文件,观察并理解系统的工作流程。 编译与烧录:将源码编译无误后,烧录至51单片机。 硬件组装:根据原理图PCB设计制造或装配硬件。 请注意,本资源遵守CC 4.0 BY-SA版权协议,使用时请保留原作者信息及链接,尊重原创劳动成果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值