链接数组的四种方法(把两个数组链接成一个数组)

首先定义两个数组,这边以int数组为例

int[] arrayList={9,5,3,2,0,4};

int[] arrayList2={1,6,8,7};

方法一、ArrayUtils.addAll()方法,引入包:org.apache.commons.lang3.ArrayUtils;

int[] tempArrayList = ArrayUtils.addAll(arrayList,arrayList2);

String tempStr = Arrays.toString(tempArrayList);  //将数组转化为字符串


方法二、System.arraycopy()方法

System.arraycopy(源数组,源数组起始位置,目标数组,目标数组起始位置,需要赋值数组元素长度);

int[] tempArrayList = new int[arrayList.length+arrayList2.length];

System.arraycopy(arrayList,0,tempArrayList,0,arrayList.length);

System.arraycopy(arrayList2,0,tempArrayList,arrayList.length,arrayList2.length);

String tempStr = Arrays.toString(tempArrayList); //将数组转化为字符串


方法三、Arrays.copyOf()方法

Arrays.copyOf(要复制的数组,要返回副本数组的长度);

int[] tempArrayList = Arrays.copyOf(arrayList,arrayList.length+arrayList2.length);

System.arraycopy(arrayList2,0,tempArrayList,arrayList.length,arrayList2.length);

String tempStr = Arrays.toString(tempArrayList); //将数组转化为字符串


方法四、Array.newInstance()方法

Array.newInstance(新数组的组件类型的Class对象,新数组的长度);

int[] tempArrayList = (int[])Array.newInstance(arrayList.getClass().getComponentType(),arrayList.length+arrayList2.length);

System.arraycopy(arrayList,0,tempArrayList,0,arrayList.length);

System.arraycopy(arrayList2,0,tempArrayList,arrayList.length,arrayList2.length);

String tempStr = Arrays.toString(tempArrayList); //将数组转化为字符串


代码展示:

public static void main(String[] args) {
		
		int[] arrayList={9,5,3,2,0,4};
		int[] arrayList2={1,6,8,7};
		
		/*//方法一、ArrayUtils.addAll(数组1,数组2);
		 * //ArrayUtils.addAll()方法,引入包:org.apache.commons.lang3.ArrayUtils;
		 * int[] tempArrayList = ArrayUtils.addAll(arrayList,arrayList2);
		String tempStr = Arrays.toString(tempArrayList); //将数组转化为字符串*/
		
		
		/*//方法二、System.arraycopy()方法
		//System.arraycopy(源数组,源数组起始位置,目标数组,目标数组起始位置,需要赋值数组元素长度);
		int[] tempArrayList = new int[arrayList.length+arrayList2.length];
		System.arraycopy(arrayList,0,tempArrayList,0,arrayList.length);
		System.arraycopy(arrayList2,0,tempArrayList,arrayList.length,arrayList2.length);
		String tempStr = Arrays.toString(tempArrayList); //将数组转化为字符串*/		
		
		
		
		/*//方法三、Arrays.copyOf()方法
		//Arrays.copyOf(要复制的数组,要返回副本数组的长度);
		int[] tempArrayList = Arrays.copyOf(arrayList,arrayList.length+arrayList2.length);
		System.arraycopy(arrayList2,0,tempArrayList,arrayList.length,arrayList2.length);
		String tempStr = Arrays.toString(tempArrayList); //将数组转化为字符串*/
		
		//方法四、Array.newInstance()方法
		//Array.newInstance(新数组的组件类型的Class对象,新数组的长度);
		int[] tempArrayList = (int[])Array.newInstance(arrayList.getClass().getComponentType(),arrayList.length+arrayList2.length);
		System.arraycopy(arrayList,0,tempArrayList,0,arrayList.length);
		System.arraycopy(arrayList2,0,tempArrayList,arrayList.length,arrayList2.length);
		String tempStr = Arrays.toString(tempArrayList); //将数组转化为字符串

		System.out.println(tempStr);
	}


首先,我想澄清一点,傅里叶变换通常用于处理连续信号,像数字信号处理中的离散傅立叶变换(DFT)。对于整数数组`uint16_t B[65536]`,我们需要将它视为一串离散的数据点来进行离散傅里叶变换(DFT)。在C语言中,虽然有现的库函数如FFTW可以方便地计算DFT,但它们并不直接适用于固定大小数组的内存布局。 为了在C中实现这个过程,你需要进行以下几个步骤: 1. **预处理**:确定你要使用的DFT算法,比如快速傅里叶变换(FFT),并确保已经包含了相关的库文件。如果你选择FFTW,需要链接`fftw3.h`头文件。 2. **数据转换**:由于`uint16_t`是一个16位无符号整数,可能需要将其转换为适合DFT的复数数据类型,如`double complex`或`struct fftw_complex`,这取决于你选择的库。 3. **创建计划**:使用DFT库提供的API创建一个工作计划,指定输入数组B和输出数组。 4. **执行变换**:调用DFT函数(例如`fftw_plan_dft_r2c_1d`),传递数组、长度以及DFT类型等参数。 5. **保存结果**:完变换后,从返回的结果中提取实际的频域数据,存储到另一个适当类型的数组中。因为DFT可能涉及到复数,所以结果可能是两个元素一组表示一个频率分量的实部和虚部。 ```c #include <fftw3.h> #include <stdio.h> // 假设我们使用了fftw3 void perform_fft(uint16_t *in, double complex *out, int n) { // 创建DFT计划 fftw_plan plan = fftw_plan_dft_r2c_1d(n, in, out, FFTW_ESTIMATE); // 执行变换 if (plan != NULL) { fftw_execute(plan); fftw_destroy_plan(plan); } else { printf("Error creating FFT plan.\n"); } } // 使用示例 int main() { uint16_t B[65536]; double complex freq_domain_data[65536]; // ... 初始化输入数组B perform_fft(B, freq_domain_data, sizeof(B)/sizeof(B[0])); // 保存频域数据(可能需要进一步处理) for (size_t i = 0; i < 65536; i++) { fprintf(stderr, "Frequency component %zu: (%g, %g)\n", i, creal(freq_domain_data[i]), cimag(freq_domain_data[i])); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值