contac方法&广义表&子串&String类内存分配

concat() 方法

用于连接两个或多个数组。

该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

返回一个新的数组。

该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。

如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。 

注意:
如果所有参数均为非二进制字符串,则结果为非二进制字符串。

如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。


广义表

广义表的存储结构

由于广义表(a1,a2,a3,…an)中的数据元素可以具有不同的结构,(或是原子,或是广义表)

因此,难以用顺序存储结构表示,通常采用链式存储结构,每个数据元素可用一个结点表示。

广义表(Lists,又称列表)是线性表的推广。

线性表定义为n>=0个元素a1,a2,a3,…,an的有限序列。

线性表的元素仅限于原子项,原子是作为结构上不可分割的成分,

它可以是一个数或一个结构,若放松对表元素的这种限制,容许它们具有其自身结构,这样就产生了广义表的概念。


表头是第一个元素, 表尾是第二个及之后的所有元素。


子串 


串中任意个连续的字符组成的子序列称为该串的子串

对于一个字符串变量,例如"adereegfbw",它的子串就是像"ader"这样可以从中找到的连续的字符串。

字符串"adereegfbw"本身也属于它本身最长的子串。

子串数量的计算方法

ab的子串:a、b、ab和一个空子串共4个即(2+1+1)个

abc的子串:a、 b、 c、 ab、 bc 、abc和一个空子串 共(3+2+1+1)个,

所以若字符串的长度为n,则子串的个数就是[n+(n-1)+.......+1+1]个

"software"中非空子串的个数就是8+7+....+1+1=37个。


Java中String类的内存分配


物理的内存是线性结构,并不存在拥有不同功能的不同区域。

编译器(或者JVM)为了更高效地处理数据,会用不同的算法把内存分为各种区域,不同的区域拥有各自的特性

Java中,内存可以分为栈,堆,静态域和常量池等。(可能有不同的叫法,但逻辑是一致的)


不同内存区域的功能和特点:

栈区:存放局部变量(变量名,对象的引用等)特点:内存随着函数的调用而开辟,随着函数调用结束而释放。

堆区:存放对象(也就是new出来的东西)特点:可以跨函数使用,每个对象有自己对应的存储空间。

静态域:存放在对象中用static定义的静态成员。

常量池:存放常量。(常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。)

定义String的方法:

1 String str1 = "hello";
2 String str2 = new String("hello");

第一种方法:引用str1被存放在栈区,字符串常量"hello"被存放在常量池

引用str1指向了常量池中的"hello"(str1中的存放了常量池中"hello"的地址)。
第二种方法:引用str2被存放在栈区,同时在堆区开辟一块内存用于存放一个新的String类型对象。

(同上,str2指向了堆区新开辟的String类型的对象)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值