自己实现一个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条评论来说两句吧...