1.字符串的最大特点:一旦初始化就不可被改变
String常见操作:1.获取
1.1字符串中的包含的字符数,也就是字符串的长度。
int length(); 获取长度
1.2根据位置获取位置上某个字符
char charAt(int index);
1.3根据字符获取该字符在字符串中位置
int indexOf(int ch) ; 返回的是ch在字符串中第一次出现的位置
int indexOf(int ch,int fromIndex); 从fromIndex指定位置开始获取ch在字幕中出现的位置
int indexOf(String str);
int indexOf(String str,int fromIndex);
int lastIndexOf(String str);
2.判断:
2.1字符串中是否包含某一个字符串 boolean contains(str);
2.2字符串中是否有内容 boolean isEmpty(); 原理是判断长度是否为0
2.3字符串是否是以指定的内容开头 boolean startWith(str)
2.4字符串是否是以指定的内容结尾 boolean endsWith(str)
2.5判断字符串的内容是否相同,复写了Object类中的equals方法。 boolean equals(str)
2.6判断内容是否相同,并忽略大小写 boolean equalsIgnoreCase();
3.转换
3.1将字符数组转成字符串
1.构造方法:String(char【】)
String (char【】,offSet,count)将字符数组中的一部分转成字符串
2.静态方法:static String copyValueOf(char【】)
static String valueOf(char【】)
3.2将字符串转成字符数组 char【】 toCharArray();
3.3将字节数组转成字符串 String(byte【】);String(byte【】,offSet,count);
3.4 将字符串转成字节数组 byte【】 getBytes();
4.替换 String replace(oldchar,newchar);参数可以使字符或者字符串
5.切割 String【】 split(regex); regex为切割符
6.字串,获取字符串中的一部分
String subString(begin) ;
String subString(begin,end); 包含头,不包含尾
7.转换,去除空格,比较
7.1字符串转成大写或者小写 String toUpperCase(); String toLowerCase();
7.2将字符串两端的多个空格去除 String trim();
7.3对两个字符串进行自然顺序的比较 int compareTo(str);
2.StringBuffer是字符串缓冲区,是一个容器,而且长度是可以变化的,可以直接操作多个数据类型,最终会通过toString方法变成字符串
C create U update R read D delete
1.存储 StringBuffer append(); StringBuffer insert(index,数据);
2.删除 StringBuffer delete(start,end);
StringBuffer delete(index);删除指定位置的字符
sb.delete(0,sb.length());清空缓冲区
3.获取
char charAt(int index); int indexOf(String str); int lastIndexOf(String str); int length();
4.修改 StringBuffer replace(start,end,String str);
void setCharAt(int index, char ch);
5.反转 StringBuffer reverse();
6.将缓冲区中的指定数据存储到指定的数组中去
void getChars(int srcBegin,int srcEnd, char[] dst, int dstBegin);
JDK1.5 版本之后出现了StringBuffer. StringBuffer是线程同步,StringBuilder是线程不同步。功能都一样。以后开发,建议使用StringBuilder 升级三个因素:1.提高效率 2.简化书写 3.提高安全性
3.基本数据类型对象包装类的最常见的作用,就是用于基本数据类型和字符串类型之间做转换
基本类型转成字符串: 1.基本数据类型+“” 2.基本数据类型.toString(基本数据类型值) 如Integer.toString(34);把整数34变成“34”
字符串类型转成基本数据类型: xxx a = Xxx.parseXxx(String) 如: int a = Integer.parseInt(“15”);
十进制转成其他进制: to BinaryString(); to HexString(); to OctalString();
其他进制转成十进制: parseInt(String,radix);
JDK1.5出现的新特性:自动装箱和自动拆箱
Integer m = 128;
Integer n = 128;
sop(“m=n:”+(m==n)); 结果为false
Integer a = 127;
Integer b = 127;
sop(“a=b:”+(a==b)); 结果为true
因为a和b指向了同一个Integer对象,当数值在byte范围内时,对于新特性,如果该数值已存在,则不会再开辟新的空间
4.集合类
List :元素是有序的,元素可以重复,因为该集合体系有索引
ArrayList:底层的数据结构使用的是数组结构,特点:查询速度很快,但是增删稍慢,线程不同步
LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢
Vector:底层是数组数据结构,线程同步,被ArrayList替代了
Set:元素是无序的,元素不可以重复
枚举是Vector特有的取出方式,其实枚举和迭代是一样的,因为枚举的名称以及方法的名称都过长,所以被迭代器取代了,枚举郁郁而终了
编程:使用LinkedList模拟一个堆栈或者队列数据结构 ,堆栈:先进后出 队列:先进先出
Set集合的功能和Collections的功能是一致的。
Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复
HashSet:底层数据结构式哈希表
HashSet存储自定义对象,见以下程序:
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode()和equals()来完成,如果元素的HashCode值相同,才会判断equals是否为true,如果元素的HashCode不同,才会调用equals。
注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法。
TreeSet:可以对Set集合中的元素进行排序,底层数据结构式二叉树。
保证元素唯一性的依据,compareTo方法 return 0;
TreeSet排序的第一种方式,让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式也成为元素的自然顺序,或者叫做默认顺序
需求:(第一中排序方式)往TreeSet集合中存储自定义对象学生,想按照学生的年龄进行排序
记住:排序时,当主要条件相同时,一定要判断次要条件。
TreeSet的第二种排序方式: 当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性,在集合初始 化时,就有了比较方式;
定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。。
定义一个类,实现Comparator接口,覆盖compare方法。
编程:按照字符串长度排序,字符串本身具备比较性,但是它的比较方式不是所需要的,这时就只能使用比较器
5.泛型:jdk1.5版本以后出现的新特性,用于解决类型安全问题,是一个安全机制。
好处:1.将运行时期出现的问题,ClassCastException转移到了编译时期,方便于程序员解决问题,让运行事情问题减少,安全。
2.避免了强制转换麻烦
6.Map集合:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。
1.添加: put(K key , V value)
putAll(Map<? extends K, ? extends V> m)
2.删除 clear (); remove(Object key);
3.判断 containsValue(Object value) ; containsKey(Object key) ; isEmpty();
4.获取 get(Object key) ; size(); values();
Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合 是线程同步的,jdk1.0 效率低
HashMap:底层是哈希表数据结构,并可以存入null键和null值,该集合是不同步的,jdk1.2效率高
TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序
和Set很像,其实Set底层就是使用了Map集合。
map集合的两种取出方式:
1.Set<K> keySet: 将map中所有的键存入到Set集合,因为Set具备迭代器,所以可以迭代方式取出所有的键,再根据get方法,获取 每一个键对应的值。
Map集合的取出原理:将Map集合转成Set集合,再通过迭代器取出
2.Set<Map.entry<K,V>> entrySet :将Map集合中的映射关系存入到Set集合中,而这个关系的数据类型就是Map.entry。
Map.Entry:其实Entry也是一个接口,它是Map接口中的一个内部接口。
编程: asfdfg........:获取该字符串中的字母出现次数
Map扩展:学校有多个教室,每个教室有多个学生
6.集合框架的工具类 Collections:
sort (); max(); binarySearch();fill(); replaceAll(); reverse();reverse Order();
用于操作数组的工具类:Arrays,里面都是静态方法
asList();将数组变成List集合
把数组编程List集合的好处:可以使用集合的思想和方法来操作数组中的元素;
注意:将数组变成集合,不可以使用集合的增删方法,因为数组的长度固定。如果增删,会发生不支持操作异常
如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合 中的元素存在。
集合变成数组:Collection接口中的toArray方法
7.高级for循环:格式 for(数据类型 变量名 :被遍历的集合或者数组)
8.对集合进行遍历,只能获取元素,但是不能对集合进行操作。迭代器出了遍历,还可以remove集合中元素的操作,如果使用ListIterator,还可以在遍历过程中对集合进行增删 改查的操作
9.jdk1.5版本出现的新特性:可变参数
10、API中的其他类:
1.System:类中的方法和属性都是静态的 Out :标准输出 In():标准输入,默认是键盘
获取系统属性信息: Properties pro = System.getProperties();
2.Runtime 对象
3. Date
4.Calendar
5.Math: ceil(); floor(); round();
random(); 返回带正号的double值,该值大于等于0.0且小于1.0,返回值是一个伪随机选择的数
6.Random nextInt();