J'essaie le problème The Next Palindrome de Sphere Online Judge (SPOJ) où je dois trouver un palindrome pour un entier allant jusqu'à un million de chiffres. J'ai pensé à utiliser les fonctions de Java pour inverser les chaînes, mais permettraient-elles à une chaîne d'être aussi longue?
157
Réponses:
Vous devriez pouvoir obtenir une chaîne de longueur
Integer.MAX_VALUE
toujours 2,147,483,647 (2 31 - 1)(Défini par la spécification Java, la taille maximale d'un tableau, que la classe String utilise pour le stockage interne)
OU
Half your maximum heap size
(puisque chaque caractère est de deux octets) selon la valeur la plus petite .la source
Je crois qu'ils peuvent contenir jusqu'à 2 ^ 31-1 caractères, car ils sont détenus par un tableau interne et les tableaux sont indexés par des entiers en Java.
la source
getBytes
et similaires peuvent avoir des problèmes si vous essayez une très grande chaîne.Alors que vous pouvez en théorie des caractères Integer.MAX_VALUE, la JVM est limitée dans la taille du tableau qu'elle peut utiliser.
sur les impressions de la mise à jour 92 d'Oracle Java 8
Remarque: dans Java 9, les chaînes utiliseront l'octet [], ce qui signifie que les caractères multi-octets utiliseront plus d'un octet et réduiront encore le maximum. Si vous avez les quatre points de code octets, par exemple les emojis, vous n'obtiendrez qu'environ 500 millions de caractères
la source
Avez-vous envisagé d'utiliser
BigDecimal
au lieu deString
conserver vos numéros?la source
Integer.MAX_VALUE est la taille maximale de la chaîne + dépend de la taille de votre mémoire, mais le problème sur la sphère juge en ligne que vous n'avez pas à utiliser ces fonctions
la source
Java9 utilise byte [] pour stocker String.value, vous ne pouvez donc obtenir qu'environ 1 Go de chaînes dans Java9. Java8, par contre, peut avoir des chaînes de 2 Go.
Par caractère, je veux dire "char", certains caractères ne sont pas représentables dans BMP (comme certains des emojis), donc cela prendra plus (actuellement 2) caractères.
la source
La partie du tas empire, mes amis. UTF-16 n'est pas garanti pour être limité à 16 bits et peut s'étendre à 32
la source
char
type de Java est exactement 16 bits, donc le nombre de bits utilisé par UTF-16 n'a pas vraiment d'importance ...