Java 系统类总结

1.String 类

1.字符串基础知识

1.字符串:一串字符在内存中的连续排序
2.Java中有两个类来表示字符串:String和StringBuffer
3.Java中字符串的封装使得程序更健壮、安全
4.String和String Buffer可以在运行时作边界检查,自动捕获异常,提高程序的健壮性

2.String类的构造方法

public String();
public String(String s);
public String(char c[]);
public String(StringBuffer but);
public String(byte b[]);
public String(char c[], int offset, int count);
public String(byte b[], int offset, int count);
认识即可

3.String类的常用方法

求字符串长度
public int length();
字符串连接
public String concat(String s);
字符串截取
public char charAt(int index); substring(int start, int end);
判断字符串的前缀和后缀
public boolean startsWith(String prefix);
public boolean endsWith(String prefix);
字符串比较
public boolean equals(Object obj);
public int compareTo(String s);
字符串分隔
public String[] split(String tag);
字符串中子串的查找
public int indexOf(string s);
public int indexOf(String s, int fromIndex);
public int lastIndexOf(String s);
字符数组->字符串
public static String copyValueOf(char[] data);
public static String copyValueOf(char[] data, int offset, int count);
字符串->数组(字符、字节)
public char[] toCharArray();
public char[] getChars(int start, int end, char c[], int i);
public byte[] getBytes();
字符串大小写转换
public String toUpperCase();
public String toLowerCase();
字符替换
public String replace();
删除字符串前后空格
public String trim();
String和其他类型数据的转换

类型字符串转化方法
int iString ss=String.valjueOf(i); 或者 s = “”+I; i = Integer.parseInt(s)
double dString ss = String.valueOf(d); s=’’ ‘’ + d; d=Double.parseDouble(s);
boolean bString ss= String.valueOf(b); s = " " + b; b=Boolean.parseBoolean(s);

4.对象的字符串表示

Object类有一个toString()方法,一个对象通过调用这个方法可以返回该对象的字符串表示:类的名字@对象的引用的字符串

5.正则表达式

  • 含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式中的元字符
    • 可以用方括号括起来的若干个字符来表示一个元字符,可以代表方括号中的任何一个字符
    • regex="[159]ABC",那么"1ABC","5ABC"都是和正则表达式regex匹配的字符串
  • 正则表达式中可以使用限定修饰符
带限定符号的模式意义
X?X出现0次或1次
X*X出现0次或多次
X+X恰好出现n次
X{n}X恰好出现n次
X{n,}X至少出现n次
X{n,m}X出现n至m次

例:regex = “@\\w{4}”,那么"@abcd"、"@girl"都是与正则表达式regex匹配的字符串之一

2.StringBuffer类

1.StringBuffer 对象 创建

  • StringBuffer类可以改变一个串的值和长度,可以方便地在字符串里加入字符和替换字符,一般用在需要频繁修改一个字符串变量的场景
  • 构造方法
    • StringBuffer():初始可以容纳16字符
    • StringBuffer(int size):初始容量由size指定
    • StringBuffer(String s):初始容量为s的长度+16,String和StringBuffer相互转换
  • 当初始容量不够时,实体的容量会自动增加

2.StringBuffer常用的方法

  • 对象实体的长度
    • int length():实体中存放的字符序列的长度
    • int capacity():实体当前的实际容量
  • 添加实体内容 StringBuffer append(String s)
  • 查找指定位置的字符 public char charAt(int n)
  • 替换制定位置的字符 public void setCharAt(int n,char ch)
  • 在指定位置插入字符 StringBuffer insert(int index,String str)
  • 将实体中的字符翻转 public StringBuffer reverse()
  • 删除置顶位置的字符
    • StringBuffer delete(int startIndex, int endIndex)
    • StringBuffer delete(int start)
  • 替换置顶位置的子串 StringBuffer replace(int startIndex, int endIndex, String str)

3.String和StringBuffer的区别

  • String是不可变对象(immutable)
  • StringBuffer是可变的(mutable)

4.StringBuffer和StringBuilder的区别

1.StringBuilder类

+ 类似于StringBuffer类,和StringBuffer之间最大的恶不同在于StringBuilder的方法不是线程安全的(不能同步访问)
+ StringBuilder相较于StringBuffer有速度优势 

2.线程安全

StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 StringBuilder 修饰。
StringBuffer代码片段

@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}

3. 缓冲区

StringBuffer代码片段

private transient char[] toStringCache;

@Override
public synchronized String toString() {
    if (toStringCache == null) {
        toStringCache = Arrays.copyOfRange(value, 0, count);
    }
    return new String(toStringCache, true);
}

StringBuilder 代码片段:

@Override
public String toString() {
    // Create a copy, don't share the array
    return new String(value, 0, count);
}

可以看出,StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。
而 StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。
所以,缓存冲这也是对 StringBuffer 的一个优化吧,不过 StringBuffer 的这个toString 方法仍然是同步的。

4.性能

既然 StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。

3.Scanner类

Scanner类可以用来获取控制台输入

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int[] arr = new int[5];
    int i = 0;
    while(scanner.hasNext()) {
            arr[i] = scanner.nextInt();
            i ++;
            if (i >= arr.length) {
                    break;
            }
    }
    scanner.close();
}

4.时间显示类

1.Date类

使用Date类的无参构造方法创建的对象可以获取本地当前时间
Date date = new Date();     

Date 对象表示的时间默认顺序是星期、月、日、小时、分、秒、时区、年
System类的public long currentTimeMillis()方法可以获取当前时间的毫秒数(从1970年1月1日8点开始走过的毫秒数)

2.Calendar类

使用Calendar类的getInstance()方法可以初始化一个Calendar对象;
可以使用相应的set和get方法当前的时间信息

public final void set(int year, int month, int date, int hour, int minute, int second)
calendar.get(DAY_OF_WEEK)

3.日期的格式化

  • 使用SimpleDateFormat类,设置好格式之后用format方法
SimpleDareFormat df = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
df.format(new Date());       
  • format方法,format(格式化模式,日期列表)
String.format("%tY年%tm月%td日", new Date(), new Date(), new Date());
  • 用几个格式符格式化“日期列表”中的同一个日期:“<"
String.format("%tY年%tm月%<td日", new Date());
  • 不同区域的星期格式有所不同

5.Class类

1.使用Class实例化一个对象

  • 创建对象除了用new运算符和构造方法,还可以用Class对象的到某个类的实例
    • public static Class forName(String className) throws ClassNotFoundException
    • public Object newInstance() throws InstantiationException, Illegal AccessException
  • 经过上面两部可以实例化出一个className类的对象,className类必须有无参的构造方法

2.获取类的信息

当一个类被加载且创建对象时,和该类相关的一个类型为Class的对象就会自动创建;getClass()方法;这个Class对象有一些方法;

  • String getName():返回类的名字
  • Constructor[] getDeclaredContructors():返回类的全部构造方法
  • Field[] getDeclaredFields:返回类的全部成员变量
  • Mothod[] getDeclaredMothods():返回类的全部方法

3.Object类

Object中的方法被所有的类继承——因此,这些方法都有类的“公共特性”

  • public boolean equals(Object o)
    表示两个对象是否相等,不同的子类会有不同的“相等逻辑”
    如果子类没有覆盖equals方法,则继承Object的“相等逻辑”
    Object里的equals仅仅表示两个对象“是否同一个对象(地址是否相等)”,等价于“=”
    典型重载:String的equals():Integer的equals()
    JDK在Object中设计equals()方法的原因:想胃用户自定义的子类更方便地融入、利用Java中的一些工具类方法提供便利、可能
  • public String toString()
    表示一个对象的“字符串表示”——一般对象是立体的
    如果子类没有覆盖toString()方法,则继承Object的“字符串”表示——类的Class信息
    自己的类可以根据需要重写toString(),如Point类中
public String toString(){
	return “x=” +x+“,y=”+y;
}
  • public final Class getClass()
    返回一个对象所属类的相关信息——该类元数据信息区的地址
    是final不能被重写
    是Java“反射特性”的基础,可以实现:由一个类的名字,生成对应的对象
  • public int hashCode()
  • notify() , wait()

6.泛型

1.Vector类

是Java自带的累,实现自增长动态数组。
适合使用Vector类的场合:

  • 需要处理的对象数目不定,序列中的元素是对象
  • 需要将不同类的对象组合成一个数据序列
  • 需要做频繁的插入和删除操作
  • 需要进行查找操作

适合使用数组的场合:

  • 序列中的元素是简单数据类型,主要的操作:顺序访问
  • 序列中的元素数目固定,插入、删除和查找操作较少

vector类说明

  • 创建Vector类
    • public Vector()
    • public Vector(int size)
    • public Vector(int size, int incrSize)
  • 添加元素
    • public void add(Object obj)
    • add(Object obj)
    • public void add(int index, Object obj)
  • 修改元素
    • public void set(Object obj, int index)
  • 删除元素
    • public void remove(int index)
    • public void removeAll()
  • 访问Vector的元素
    • public Object get(int i)
  • Vector的长度
    • public int size()

2.Arrays,Collections 工具类

  • Java中提供两个类(Arrays,Collections)用于封装数组、集合类的通用处理方法(判断相等、填充、排序、查找等);
  • Arrays, Collections的构造方法都是private,不能实例化对象,类里面定义的方法均为static
  • 可以对比学习Collections, Arrays 它们有很多方法功能类似,参数不同;
  • public static boolean equals(Object[] o1, Object[] o2);
  • public static void fill(Object[] o, Object val);
  • public static void sort(Object[] o);
  • public static int binarySearch(Object[] a, Object key);

3.链表

例:

LinkedList<String> mylist = new LinkedList<String>();

LinkedList/常用方法:有实现List接口的方法和它本身的新增的方法

  • public boolean add(E element):向链表末尾添加一个新的结点
  • public int size():返回链表的长度
  • public void addFirst(E element):向链表的头添加新结点
Iterator iter = nylist.iterator();
While(iter.hasNext()){
	String te = (String)iter.next();
	System.out.println(te);
}

遍历链表
链表对象可以使用iterator()方法获取一个Iterator对象,该对象就是针对当前链表的迭代器

4.散列映射

存储“键/值对”,允许把任意数量的“键/值对”存储在一起

HashMap/<String,Student>hash table = HashSet/<String,Student>();

HashMap<K,V>常用方法

  • public void clear():清空散列映射
  • public int size():返回散列映射的大小,
  • public V get(Object key):返回散列映射中使用key作为键的值
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值