字符串数据结构的实现(JDK1.8)

字符串数据结构的实现

简介

       在Java的基本数据类型中,并不包含字符串这个关键字。字符串的底层实际上是由字符数组实现的。String对象也是一个不可变的对象。如果查看JDK文档,你就会发现String类中的每一个看起来是修改了对象的方法,其本质上都是创建了一个全新的String对象以包含修改后的字符串内容。而原先的字符串丝毫未动。

本人过去曾写过一篇关于串的数据结构博客,点击该链接可以进去

String

实现字符串引用的字符数组

private final char value[];

       当我们new了一个字符串对象的时候。创建的字符串其实是参数字符串的副本。因为字符串是不可变的。

public String(String original) {
   
        this.value = original.value;
        this.hash = original.hash;
    }

charAt方法

       这个方法的作用主要是根据索引返回指定位置的字符,由于字符串底层是一个字符数组,所以只需要判断索引是否合法就可以直接返回了。

public char charAt(int index) {
   
        if ((index < 0) || (index >= value.length)) {
   
            throw new StringIndexOutOfBoundsException(index);
        }
        return value[index];
    }

length方法

       字符数组的大小,也就是字符串的长度。所以length方法只需要直接返回数组的大小即可

public int length() {
   
        return value.length;
    }

isEmpty方法

       判断字符串的是不是空串,只需要判断数组的长度是不是等于0就好了

public boolean isEmpty() {
   
        return value.length == 0;
    }

equals方法

       equals方法和= =就不太一样了。当元素内容相同的时候地址不一样,那么= =返回的结果依然是false。因为 = =是通过地址来进行比较的。而equals呢,即使地址不一样,只要内容完全一样,就会返回true。

public boolean equals(Object anObject) {
   
        if (this == anObject) {
   
            return true;
        }
        if (anObject instanceof String) {
   
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
   
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
   
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

indexOf方法

       通过字符返回该字符所在字符串的位置。其实现的方法则是通过遍历字符数组来实现的,通过底层的一层层调用,最后调用的方法实际是indexOfSupplementary

private int indexOfSupplementary(int ch, int fromIndex) {
   
        
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值