java如何平移
平移数组或集合元素
在Java中平移数组或集合元素可以通过多种方式实现。以下是几种常见的方法:
使用临时数组 创建一个临时数组存储需要平移的元素,然后将剩余元素移动到新位置,最后将临时数组的元素复制回原数组。
public static void rotateArray(int[] arr, int shift) {
int n = arr.length;
shift = shift % n;
if (shift < 0) {
shift += n;
}
int[] temp = new int[shift];
System.arraycopy(arr, n - shift, temp, 0, shift);
System.arraycopy(arr, 0, arr, shift, n - shift);
System.arraycopy(temp, 0, arr, 0, shift);
}
使用反转法 通过反转数组的不同部分实现平移,效率较高且不需要额外空间。
public static void rotateArray(int[] arr, int shift) {
int n = arr.length;
shift = shift % n;
if (shift < 0) {
shift += n;
}
reverse(arr, 0, n - 1);
reverse(arr, 0, shift - 1);
reverse(arr, shift, n - 1);
}
private static void reverse(int[] arr, int start, int end) {
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
平移图形或图像
在图形处理中,平移通常指移动图像或图形对象的位置。

使用Graphics2D平移
Java的Graphics2D类提供了平移方法,可以移动绘图上下文的原点。
import java.awt.*;
import java.awt.geom.*;
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.translate(50, 50); // 向右和向下各平移50像素
g2d.fillRect(0, 0, 100, 100); // 绘制矩形
}
使用AffineTransform
AffineTransform类提供了更灵活的平移和变换操作。

import java.awt.*;
import java.awt.geom.*;
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
AffineTransform transform = new AffineTransform();
transform.translate(50, 50); // 设置平移
g2d.setTransform(transform);
g2d.fillRect(0, 0, 100, 100); // 绘制矩形
}
平移字符串
平移字符串通常指循环移动字符串中的字符。
使用子字符串拼接 通过截取子字符串并重新拼接实现平移。
public static String rotateString(String s, int shift) {
int n = s.length();
shift = shift % n;
if (shift < 0) {
shift += n;
}
return s.substring(n - shift) + s.substring(0, n - shift);
}
使用字符数组 将字符串转换为字符数组进行操作,适用于需要频繁修改的情况。
public static String rotateString(String s, int shift) {
char[] arr = s.toCharArray();
int n = arr.length;
shift = shift % n;
if (shift < 0) {
shift += n;
}
reverse(arr, 0, n - 1);
reverse(arr, 0, shift - 1);
reverse(arr, shift, n - 1);
return new String(arr);
}
private static void reverse(char[] arr, int start, int end) {
while (start < end) {
char temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}






