相关疑难解决方法(0)

Java数组是否具有最大大小?

Java数组可以包含的元素数量是否有限制?如果是这样,它是什么?

java arrays

203
推荐指数
5
解决办法
18万
查看次数

为什么ArrayList的最大数组大小是Integer.MAX_VALUE - 8?

我正在研究Java 8文档ArrayList.我得到的最大数组大小定义为Integer.MAX_VALUE - 8平均值2 ^ 31 - 8 = 2 147 483 639.然后,我的重点是,为什么8减去或why not less than 8more than 8减去?

/**
 * The maximum size of array to allocate.
 * Some VMs reserve some header words in an array.
 * Attempts to allocate larger arrays may result in
 * OutOfMemoryError: Requested array size exceeds VM limit
 */
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
Run Code Online (Sandbox Code Playgroud)

我得到了一些相关的答案,但没有实现我的目标.

  1. Java数组是否具有最大大小?
  2. 列表最多可以容纳多少数据
  3. 为什么我无法创建大尺寸的数组?

有些人根据文档给出了一些逻辑"Some …

java arrays arraylist

14
推荐指数
2
解决办法
3342
查看次数

为什么我无法创建大尺寸的数组?

为什么不可能创建一个max int size的数组?

int i = 2147483647;
int[] array = new int[i];
Run Code Online (Sandbox Code Playgroud)

我找到了这个解释:

通过32位整数访问Java数组,最大理论数组大小为2147483647个元素.

但是你可以看到我的代码不起作用.创建一个大小的数组也是不可能的

new int[Integer.MAX_VALUE - 5];
Run Code Online (Sandbox Code Playgroud)

技术细节

  • 64位HotSpot JVM
  • OSX 10.10.4

PS

为什么-5呢?

java jvm jvm-hotspot

6
推荐指数
1
解决办法
2万
查看次数

使用一些曲线球在Swing JTextArea上强制使用最大字符

我正在尝试向Swing JLabel和JTextArea添加功能,以便:

  • 用户只允许在textarea中输入500个字符(最大)
  • 标签包含一个字符串消息,告诉用户他们剩下多少个字符(在每个键击或退格后)
  • 当组件初始化时,标签显示"最多500个字符!"
  • 对于输入的前500个字符,对于键入的每个击键(a - z,A - Z,0 - 9和标点符号),标签显示"剩余x个字符",其中x是字符到达之前剩余的字符数.最多500
  • 键入第500个字符时,标签显示"剩余0个字符",并且不能在文本区域中输入其他字符
  • 如果用户键入退格按钮(KeyEvent.VK_BACK_SPACE),它们会"释放"一个字符,并且计数会递增.因此,如果它们剩下400个字符,并且它们键入退格键,则标签现在显示为"剩余401个字符"
  • 如果用户突出显示一组字符并对它们执行批量命令(例如退格键,或用单个字符替换突出显示的文本),则将正确计算正确的剩余字符数,并更新标签.因此,如果他们剩下50个字符,并且他们突出显示5个字母并点击退格,他们现在有"剩下55个字符"

我有90%的此功能正常工作,但有一些错误,并且不知道如何实现上面的最后一项(突出显示的文本上的批量命令).这就是我所拥有的:

boolean ignoreInput = false;
int charMax = 500;
JLabel charCntLabel = getLabel();
JTextArea myTextArea = getTextArea();

myTextArea.addKeyListener(new KeyListener() {
    @Override
    public void keyTyped(KeyEvent e) {
        return;
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // If we should be ignoring input then set make sure we
        // enforce max character count and remove the newly typed key.
        if(ignoreInput)
            myTextArea.setText(myTextArea.getText().substring(0,
                myTextArea.getText().length()));
    } …
Run Code Online (Sandbox Code Playgroud)

java swing jtextarea

1
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×4

arrays ×2

arraylist ×1

jtextarea ×1

jvm ×1

jvm-hotspot ×1

swing ×1