Java 空间复杂度为O(1)的字符串到字符数组
在java中,有没有任何方法可以从字符串中获取char[],并且空间复杂度=O(1)Java 空间复杂度为O(1)的字符串到字符数组,java,string,char,Java,String,Char,在java中,有没有任何方法可以从字符串中获取char[],并且空间复杂度=O(1) 我尝试使用ToCharray,但是空间复杂度=O(n)因为字符串在Java中是不可变的,所以支持字符数组永远不会公开(没有办法阻止您修改其内容)。旧版本的Java还支持以压缩方式存储ASCII字符串,因此甚至不能保证字符串由字符支持 您可以使用阵列备份的字符缓冲区来实现这一点。CharBuffer和String一样,甚至实现了CharSequence,因此它将与某些API(如Pattern.matcher)兼容
我尝试使用ToCharray,但是空间复杂度=O(n)因为字符串在Java中是不可变的,所以支持字符数组永远不会公开(没有办法阻止您修改其内容)。旧版本的Java还支持以压缩方式存储ASCII字符串,因此甚至不能保证字符串由字符支持
您可以使用阵列备份的字符缓冲区来实现这一点。CharBuffer和String一样,甚至实现了CharSequence,因此它将与某些API(如Pattern.matcher)兼容。因为字符串在Java中是不可变的,所以支持字符数组永远不会公开(无法阻止您修改其内容)。旧版本的Java还支持以压缩方式存储ASCII字符串,因此甚至不能保证字符串由字符支持
您可以使用阵列备份的字符缓冲区来实现这一点。CharBuffer与String一样,甚至实现了CharSequence,因此它将与某些API(如Pattern.matcher)兼容。有一种可能的方法可以做到这一点,但不推荐使用它。您可以使用Java反射API从字符串类中获取私有字段
值
,该字符串类是您的类型char[]
,然后获取对象的该字段值。可以使用以下代码执行此操作:
Field valueField = String.class.getDeclaredField("value");
field.setAccessible(true);
String str = "This is my String";
char[] charArr = (char[]) valueField.get(str);
更改char数组的值会很快把事情搞糟,您将在整个系统中看到它的效果,因为Java维护了一个字符串池,并可以根据请求对其进行内部调用。有一种可能的方法可以做到这一点,但不推荐使用它。您可以使用Java反射API从字符串类中获取私有字段
值
,该字符串类是您的类型char[]
,然后获取对象的该字段值。可以使用以下代码执行此操作:
Field valueField = String.class.getDeclaredField("value");
field.setAccessible(true);
String str = "This is my String";
char[] charArr = (char[]) valueField.get(str);
更改char数组的值会很快把事情搞糟,您会在整个系统中看到它的效果,因为Java维护了一个字符串池,并且可以根据请求将它们插入内存。您的意思是不复制字符串?不是没有危险的反射。你为什么需要这个?我有一个家庭作业:用字符串输入,用复杂度为O(1)的单词来反转这个字符串。输入:我是超人->输出:超人是我。我通过交换这个字符串中的字符解决了这个问题,但是当从这个字符串中获取字符[]进行交换时,我遇到了问题。我考虑StringBuilder,但是空间复杂度不是O(1),你的意思是不复制字符串吗?不是没有危险的反射。你为什么需要这个?我有一个家庭作业:用字符串输入,用复杂度为O(1)的单词来反转这个字符串。输入:我是超人->输出:超人是我。我通过交换这个字符串中的字符解决了这个问题,但是当从这个字符串中获取字符[]进行交换时,我遇到了问题。我考虑StringBuilder,但空间复杂度不是O(1)。