SC-202004030939_20200831-潘旭

日志

问题:

​ 问题内容:设计字符缓冲区这里,容量变化和削减的地方有点混乱。这地方刚开始我以为只有两部分的长度的变化,认真读了代码后,实际上是三部分的长度变化,buffer.length 、 chars.length、 s(string).length , buffer.length对应的是缓冲区数组的长度,而buffer.length + chars.length 的长度( 操作后数组的长度 )大于缓冲区的长度的90%时,才需要扩充。

​ 削减是为了减小内存的占用过大,容量的扩过大会浪费内存 。

​ 我对字符缓冲区的理解就是,缓冲区暂时存放需要被操作的数组,必须保证缓冲区的长度一定大于被操作的数组的长度,必要时还需要缓冲区自己扩大自己的容量,对被操作的的数组操作后,返回一个新的数组。

public CharacterBuffer append( Object o ) {
        String s = String.valueOf( o );
        char[] chars = s.toCharArray();
        final int n = chars.length ; // 记录被添加的字符个数
        int newLength = count + n ;
        if( newLength >= buffer.length * 0.9 ) {
            int length = Math.max( buffer.length ,  newLength );
            this.ensureCapacity( length * 3 / 2 + 1 ); //Capacity 容量
        }
        System.arraycopy( chars ,  0 , buffer , count , n );
        count += n ;
        return this ;
    }
    
    public void trimToSize() {  //trim 削减
        buffer = Arrays.copyOf( buffer ,  count );
    }

​ 问题来源:老师所讲内容

​ 解决问题:仔细图代码后明白了。

吐槽:

​ 没有可吐槽的!

标签


© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1