V tem razdelku bomo razpravljali kakšna je največja velikost niza v Javi.
notri Java , a Vrvica lahko obravnavamo kot niz znakov, zaporedje znakov pa imenujemo niz. Razred String predstavlja nize znakov. Ko je niz ustvarjen, ga ne moremo spremeniti. Objektov nizov ni mogoče deliti, ker so nespremenljiv . Na primer, razmislite o naslednjem nizu:
java stikalo int
String str='javatpoint';
Zgornji niz je enakovreden:
char ch[] = {'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't'}; String str = new String(ch);
Razred String ponuja metodo length(), ki določa dolžino niza. Sintaksa metode je naslednja:
public int length()
Metoda vrne dolžino niza. The dolžina vrvice je enako številu Unicode enote v nizu. Platforma Java uporablja predstavitev UTF-16 v nizih znakov (vsak znak ima dva bajta), razredih String in StringBuffer. V tej predstavitvi so dodatni znaki predstavljeni kot par vrednosti znakov, prvi iz obsega visokih nadomestkov (uD800-uDBFF), drugi iz obsega nizkih nadomestkov (uDC00-uDFFF).
Metoda vrne dolžino, ki je tipa int. Največja velikost niza je torej enaka obsegu podatkovnega tipa integer. Največja dolžina, ki bi jo vrnila metoda, bi bila Integer.MAX_VALUE.
Velikost int v Javi je 4 bajte (vključno s predznačenim bitom, tj. MSB). Obseg podatkovnega tipa celo število je -231do 231-1 (-2147483648 do 2147483647). Ne pozabite, da za indeksiranje ne moremo uporabiti negativnih vrednosti. Indeksiranje se izvede v največjem obsegu. To pomeni, da ne moremo shraniti 2147483648th značaj. Zato je največja dolžina niza v Javi 0 do 2147483647 . Torej, teoretično lahko imamo niz z dolžino 2.147.483.647 znakov.
Poiščimo največjo dolžino niza s programom Java.
StringMaxSize.java
zanka for v bashu
import java.util.Arrays; public class StringMaxSize { public static void main(String args[]) { for (int i = 0; i <1000; i++) { try integer.max_value is a constant that stores the maximum possible value for any integer variable char[] array="new" char[integer.max_value - i]; assign specified data to each element arrays.fill(array, 'a'); creating constructor of string class and parses an into it str="new" string(array); determines print length system.out.println(str.length()); } catch (throwable e) returns detail message this throwable system.out.println(e.getmessage()); prints system.out.println('last: ' + (integer.max_value i)); i); < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/05/java-string-max-size.webp" alt="Java String Max Size"> <h4>Note: We have not shown the complete output because the output is too long to show.</h4> <p>In the above example, we have used a for loop that executes 1000 times. Inside the try block, we have created an array of <strong>Integer.MAX_VALUE-i</strong> . After that, we have invoked the fill() method of the Arrays class. It assigns the specified data type value to each element of the specified range of the specified array.</p> <p>Inside the catch block, we caught the exception (if any) thrown by the fill() method and the <strong>getMessage()</strong> method prints the message related to the exception.</p> <p>Each character takes two bytes because Java stores string as UTF-16 codes.</p> <p>Whether you are appending strings directly or using a StringBuilder (much better), you will occasionally need twice as much memory: one to store the existing string and one to store the new string/buffer when it needs to be expanded.</p> <p>If we try to insert the value beyond the limit upon doing so, the memory gets overflow and the value that we get will be negative. For example, consider the following program:</p> <p> <strong>StringSizeBeyondLimit.java</strong> </p> <pre> public class StringSizeBeyondLimit { public static void main(String[] arg) { try { System.out.println( 'Trying to initialize' + ' a n with value' + ' Integer.MAX_VALUE + 1'); // Try to store value Integer.MAX_VALUE + 1 int n = Integer.MAX_VALUE + 1; // Print the value of N System.out.println('n = ' + n); } catch(Exception e) { System.out.println(e); } } } </pre> <p> <strong>Output:</strong> </p> <pre> Trying to initialize n with value Integer.MAX_VALUE + 1 n = -2147483648 </pre> <hr></1000;>
Izhod:
Trying to initialize n with value Integer.MAX_VALUE + 1 n = -2147483648
1000;>