1.数组线性表ArrayList

数组一旦定义则不可改变大小。ArrayList可以不限定个数的存储对象。添加,插入,删除,查找比较数组更加容易。可以直接使用引用类型变量名输出,相当于toString()。输出一个数组([,,,,,,]),数组中元素为对应标号存储元素的toString[]。

数组线性表和数组的区别总结如下:

public class TestArrayList {
public static void main(String[] args)
{
java.util.ArrayList<Person> PersonList=new java.util.ArrayList<Person>();
PersonList.add(new Person("张三","湖北宜昌"));
PersonList.add(new Person("李四","广东东莞"));
PersonList.add(1,new Person("王五","湖南永州"));
System.out.println((PersonList.get(1)).toString());
System.out.println(PersonList);//使用引用类型变量名称
} }
class Person {
protected String name;
protected String address; Person(){this(null,null);}
Person(String a,String b)
{name=a;address=b;} public String toString()
{
return name+":"+address;
}
}

2.字符串生成器类StringBuilder/StringBuffer

只要使用String的地方都可以使用两者。区别于String一旦确定无法更改,StringBuffer/StringBuilder可以灵活的(指定位置)增加,删除,插入,设置内容。2者构造方法类似,一般单任务访问使用StringBuilder,多任务访问使用StringBuffer.

          StringBuilder sb1=new StringBuilder();//默认16的字符串生成器
StringBuffer sb2=new StringBuffer(20);//指定容量的字符串生成器
StringBuilder sb3=new StringBuilder(new String("ABCDEF"));//指定字符串的字符串生成器

不同于String,字符串生成器长度属性包括容量capacity()和长度length(),前者表示能够存储的长度,后者表示现存的字符个数,空闲位置设置为null。JVM采用生成器容量自动增加机制。可以使用trimToSize()减少实际存储所需内存。

   以下成员函数均完成修改源生成器内容,返回生成器引用。
     ❶字符追加函数append(data)/append(data,int start,int end)。
        完成追加或者部分追加字符数组或追加基本数据类型(char,boolean,byte,short,int,long,float,double)和String至生成器末尾
     ❷字符删除函数delete(int start,int end) 和deleteCharAt(int)
         删除一段字符或者指定位置字符
     ❸字符插入函数insert()
        类似于append(),但最前面添加int参数,表征插入位置
     ❹整段替换函数和重新设置指定位置字符
         replace(int start,int end,String s)。特定字符串s进行字符串段替换
                    setCharAt(int,char ch) 重新设置指定位置字符 
     ❺完全颠倒顺序reverse()和获取子串函数substring(int)/subString(int,int)

判断输入字符是不是回文串,忽略非数字和字母的字符

import java.util.Scanner;
public class StudyString {
private static Scanner input;
public static void main(String[] args) {
System.out.println("输入待检测字符");
Scanner input=new Scanner(System.in);
StringBuffer sb=filter(input.nextLine());
if((sb.toString()).equals((sb.reverse()).toString()))
System.out.println("是回文串");
else
System.out.println("不是回文串");
}
public static StringBuffer filter(String s)//滤去非字母或者数字的字符
{
StringBuffer sb=new StringBuffer();
for(int i=0;i<s.length();i++)
if(Character.isLetterOrDigit(s.charAt(i)))
sb.append(s.charAt(i));
return sb;
}
}

Java探索之旅(10)——数组线性表ArrayList和字符串生成器StringBuffer/StringBuilder的更多相关文章

  1. 数组线性表ArrayList 和链表类LinkedList

    数组线性表类ArrayList 和链表类LinkedList 是实现List接口的两个具体类.ArrayList 数组储存元素,这个数组是动态创建的.如果元素个数超过了数组的容量,就创建一个更大的新数 ...

  2. Java探索之旅(5)——数组

    1.声明数组变量:        double[] array=new double[10];         double array[]=new double[10];       double[ ...

  3. Java探索之旅(15)——包装类和字符类

    1.包装类 ❶出于对性能的考虑,并不把基本数据类型作为对象使用,因为适用对象需要额外的系统花销.但是某些Java方法,需要对象作为参数,例如数组线性表ArrayList.add(Object).Jav ...

  4. JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)

    Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...

  5. 数据结构和算法(Java版)快速学习(线性表)

    线性表的基本特征: 第一个数据元素没有前驱元素: 最后一个数据元素没有后继元素: 其余每个数据元素只有一个前驱元素和一个后继元素. 线性表按物理存储结构的不同可分为顺序表(顺序存储)和链表(链式存储) ...

  6. 【Java数据结构学习笔记之一】线性表的存储结构及其代码实现

    应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有"同属于一个集合"的关系 线性结构:数据元素之间存在一个对一个的关系 树形结构:数据元素之间存在一个对多个关 ...

  7. Java实现栈(链表和线性表两种方法实现)

    一.栈的介绍 任何数据结构都是一种规则 栈就是在最基础的结构--线性结构和链式结构上面定义规则形成的 如果对基本数据结构(线性表和链表)有疑问的同学可以看我之前的博客:https://www.cnbl ...

  8. Java集合类学习笔记(各种线性表性能分析)

    ArrayList.LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表. Queue代表了队列,Deque代表了双端队列. 一般来说,由于数组以一块连续内存区来保存所有的数组 ...

  9. 顺序线性表 ---- ArrayList 源码解析及实现原理分析

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...

随机推荐

  1. Crontab使用详解

    第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...

  2. 高性能javascript学习总结(3)--数据访问

    在 JavaScript 中,数据存储位置可以对代码整体性能产生重要影响.有四种数据访问类型:直接量,变量,数组项,对象成员.         直接量仅仅代表自己,而不存储于特定位置. JavaScr ...

  3. linux 指令(经常更新)

    添加一个服务 # sudo update-rc.d 服务名 defaults 99 删除一个服务 # sudo update-rc.d 服务名 remove 临时重启一个服务 # /etc/init. ...

  4. python cookbook 字符串和文本

    使用多个界定符分隔字符串 import re line = 'asdf fjdk; afed, fjek,asdf, foo' print(re.split(r'[;,\s]\s*', line)) ...

  5. C#判断VS是否处于设计模式

    public class CheckDesingModel { public static bool IsDesingMode() { bool ReturnFlag = false; if (Lic ...

  6. 【leetcode刷提笔记】Container With Most Water

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).  ...

  7. 20145229吴姗珊 《Java程序设计》两天小总结

    20145229吴姗珊 <Java程序设计>两天小总结 教材学习内容总结 第十章 输入\输出 1.java将输入\输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 2.从应用程序 ...

  8. Docker 镜像篇

    镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器. docker两个跟镜像有关的命令: hello-world - 最小的镜像 hello-world 是 Docker 官 ...

  9. Quartz.Net在C#中的使用

    概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...

  10. mysql 的类型转换函数cast的用法

    CAST(expr   AS   type),   CONVERT(expr,type)   ,   CONVERT(expr   USING   transcoding_name) CAST()   ...