Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 空间复杂度为O(1)的字符串到字符数组_Java_String_Char - Fatal编程技术网

Java 空间复杂度为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)兼容

在java中,有没有任何方法可以从字符串中获取char[],并且空间复杂度=O(1)


我尝试使用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)。