自己实现一个StringBuffer
自己动手实现了一个StringBuffer,算是个玩具代码,各种边界问题都没有做检查,但是对于理解StringBuffer来说,足够了。
实现过程中,查看了许多源码,弄明白了很多概念,其中还有一个问题是关于System.arraycopy()做删除操作,这篇算是未完待续吧!
package character;
import java.util.Arrays;
public class IStringBuffer {
private char[] value;
private int count;
//default no-arg constructor
public MyStringBuffer() {
value = new char[16];
}
//constructor with capacity
public MyStringBuffer(int capacity) {
value = new char[capacity];
}
//constructor with string
public MyStringBuffer(String str) {
value = new char[str.length() + 16];
append(str);
}
public static void main(String[] args) {
MyStringBuffer msb = new MyStringBuffer("the");
msb.append(" redpig is writting java programs for fun");
System.out.println("msb is: " + msb);
System.out.println("length is: " + msb.length());
System.out.println("capacity is: " + msb.capacity());
msb.append('!');
System.out.println("msb is: " + msb);
System.out.println("length is: " + msb.length());
System.out.println("capacity is: " + msb.capacity());
msb.insert(23, "funny ");
System.out.println("msb is: " + msb);
System.out.println("length is: " + msb.length());
System.out.println("capacity is: " + msb.capacity());
msb.insert(23, ' ');
msb.insert(23, 'a');
System.out.println("msb is: " + msb);
System.out.println("length is: " + msb.length());
System.out.println("capacity is: " + msb.capacity());
msb.delete(23, 31);
System.out.println("msb is: " + msb);
System.out.println("length is: " + msb.length());
System.out.println("capacity is: " + msb.capacity());
msb.delete(36);
System.out.println("msb is: " + msb);
System.out.println("length is: " + msb.length());
System.out.println("capacity is: " + msb.capacity());
msb.reverse();
System.out.println("msb is: " + msb);
System.out.println("length is: " + msb.length());
System.out.println("capacity is: " + msb.capacity());
}
//追加字符串
public void append(String str) {
int newCapacity;
if ((str.length() + count) - value.length > 0) {
newCapacity = (value.length << 1) + 2;
if (newCapacity - (str.length() + count) < 0)
newCapacity = str.length() + count;
value = Arrays.copyOf(value, newCapacity);
}
str.getChars(0, str.length(), value, count);
count += str.length();
}
//追加字符
public void append(char c) {
this.append(String.valueOf(c));
}
public void insert(int pos, String str) {
if ((str.length() + count) - value.length > 0) {
int newCapacity;
newCapacity = (value.length << 1) + 2;
if (newCapacity - (str.length() + count) < 0)
newCapacity = str.length() + count;
value = Arrays.copyOf(value, newCapacity);
}
System.arraycopy(value, pos, value, pos + str.length(), count - pos);
str.getChars(0, str.length(), value, pos);
count += str.length();
}
public void insert(int pos, char c) {
this.insert(pos, String.valueOf(c));
}
public void delete(int start, int end) {
System.arraycopy(value, end, value, start, capacity() - end);
count -= (end - start);
}
public void delete(int start) {
this.delete(start, count);
}
public void reverse() {
int n = count - 1;
for (int j = (n - 1) >> 1; j >= 0; j--) {
int k = n - j;
char cj = value[j];
char ck = value[k];
value[j] = ck;
value[k] = cj;
}
}
public int length() {
return count;
}
public int capacity() {
return value.length;
}
public String toString() {
return String.valueOf(value);
}
}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Java 8中处理集合的优雅姿势——Stream
在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便捷。 不过,这一问题在Java 8中得到了改善,Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。本文就来介绍下如何使用Stream。特别说明一下,关于Stream的性能及原理不是本文的重点,如果大家感兴趣后面会出文章单独介绍。 Stream介绍 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 这种风格将要处理的元素集合看作一种流,流在管
-
下一篇
numpy.bincount详解
引言 我一般不愿意去写关于api怎么用的博客,因为出api的官网已经很详细地介绍了它们api的作用。今天,我的一个同学问到我 numpy.bincount 的用法,当时我有些事情,我和他说你先去百度一下吧,自己先看看,如果实在不行了我忙完给你解释一下。当然了,我同学的英语水平不怎么好,它不会去查看英文文档,因此他只能看百度搜索出来的一些博客,但是,所有的文章基本相同,当然了,我不知道哪个篇文章是源头。而且,文章关于这个api的解释我不想多说了,本来会的都有可能给你看不会了(有点夸张了),有兴趣大家可以自己看看吧! 对于中国的编程人员来说,其实真的挺困难的。比如说,youtube上有很多优秀的一些资源 1、我们的网不能看。2、我们的英语不够好,确实听不明白老外在讲什么。这个对于不是native speaker的人说,真的是很困难的。因此,我们中国的编程人员要比一个外国的编程人员克服的困难多很多。 因此,我的建议是如果大家有时间,还是要把英语练好。学好英语以后你会得到更加优秀的资源并能很好地吸收这些资源,你会少碰到一些困难。好了,闲话不说了,既然今天碰到了这个事情,我觉得还是应该把这个ap...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- 面试大杂烩
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker使用Oracle官方镜像安装(12C,18C,19C)