Java高级(三)实用类
回顾
1.泛型集合与数组相比有哪些优势?
-
①容量自增长,可以方便的扩展或改写集合
-
②提供丰富的API帮助我们处理不同情况的数据
2.Collection、list、set、map接口的联系和区别有哪些。
- Collection是单列集合的顶级接口,是无序的,元素不唯一的
- List和Set是Collection的子接口,List是有序的,元素不唯一的
- set是无序的,元素唯一的
- Map是双列集合的顶级接口,是以键值对为存储形式的集合,key唯一,value不唯一。
3.ArrayList和LinkedList有什么异同之处?
答:相同点:ArrayList和LinkedList都实现了List接口,特点是:不唯一、有序。
不同点:ArrayList底层是数组结构,特点是查找块,增删慢(有索引所以查找和指定查找比较快,而因为底层是数组接口,所以当增加元素时是新建了一个数组,然后将新增的元素放置到指定索引,其他数组的元素根据索引放置到新的数组中,删除也是新建数组,然后将删除的元素省去,直接把原数组剩下的元素根据索引放置到新的数组中。 LinkedList底层是链表结构,特点是增删块,查找慢。(每次查找都是从头往后沿着链表进行寻找,非常慢,而增删改知识修改了连接的下个元素的地址而已)
4.如何遍历List集合
一、使用for循环
二、使用增强for循环
三、使用迭代器
1.获取迭代器对象
2.利用迭代器的hasNext()方法进行判断是否还有下个元素
3.利用迭代器的next()方法将元素取出来
本章内容
包装类
1.什么是包装类
每个基本类型在java.lang包中都有一个相应的包装类,包装类把基本类型数据转换为对象。
作用:
1.基本数据类型不能调用方法
2.集合中不能存储基本数据类型,只能存储包装类型
2.包装类的构造方法
我们要创建对应的包装类型,通过给包装类型的构造方法传入一个基本类型的数值来进行创建,也可以传入字符串类型,因为系统会给对应的数值进行解析
Integer i = new Integer(1)
Integer i = new Integer("1")
当包装类构造方法参数为String类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译通过,运行时出现NumberFormatException异常。
public static void main(String[] args){
Boolean boolean1 = new Boolean("true");
System.out.println(boolean1);//输出为false
}
Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false
3.包装类的常用方法
①基本→包装 valueOf(xxx);
数据类型转换:valueOf(xxx)中传入字符串形式(除Character类)/对应数值类型,将其转换为某个包装类型。例如 Integer.valueOf(“123”);就是将123转换为Integer类型。
注意参数一定要符合对应的基本类型
//所有的包装类都有方法 type.valueOf(type)
//除Character类外,其他包装类都有方法 type.value("type")
②包装→基本 xxxValue();
public static void main(String[] args){
//包装类型转换为基本基本数据类型
//Character只有一个构造方法
Character character = new Character('a');
char charValue = character.charValue();
//Boolean调用带字符串的有参构造,只要传入的不是区分大小写的true都是false。
Boolean boolean1 = mew Boolean("tr")
boolean booleanValue = boolean1.booleanValue();
}
③ toString()
toString():以字符串形式返回包装对象表示的基本类型数据
凡是与字符串通过+ 号拼接的都是字符串
④parsexxx(String xxx)
parseXXX(String xxx),parse是解析的意思,把字符串转换为相应的基本数据类型(Character 没有此方法,因为要传入字符串参数)
4.装箱和拆箱
如果我们直接将基本类型赋值给包装类型或者把包装类型的值赋值给基本类型,都不会出错,这里有一个装箱和拆箱的概念:
装箱:基本类型转换为包装类的对象
拆箱:包装类对象转换为基本类型的值
5.包装类的特点
- 所有的包装类都是final类型,不能创建他们的子类
- JDK1.5后,允许基本数据类型和包装类型进行混合数学运算
- 包装类并不是用来取代基本数据类型的
- 在基本数据类型需要用对象表示时使用
Math和Random
1.什么是Math类
java.lang.Math类提供了常用的数学运算方法
Math.abs(-3.5)//返回3.5 绝对值
Math.max(2.4,34)//返回34 数字中的最大值
int random = (int)(Math.random()*10)//生成一个0-9之间的随机数
生成指定范围数字的规则:
(int)(Math.random()*(最大值-最小值))+最小值
2.random类
Random类也可以获得随机数
Random rand = new Random(); //创建一个Random对象
rand.nextInt(10); //生成随机数
String类
1.String介绍
Stirng类位于java.lang包中,具有丰富的方法:比如可以计算字符串的长度,比较字符串,连接字符串,提取字符串等。(非常多)
2.length()方法
字符串的length方法可以获取字符串的长度
3.equals()方法
比较两个字符的内容是否完全一致
java中equals使用方法:
1.equals 方法是String类从它的超类Object中继承的,被用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写
①字符串变量:使用 == 和 equals() 方法比较字符串时,比较方法不同。 == 比较两个变量本身的值,即两个对象在内存中的首地址 equals() 比较字符串中所包含的内容是否相同。
s1 = new String("abc");
s2 = new String("abc");
s1.equals(s2)是true
s1 == s2
②非字符串变量:==和equals方法的作用是相同的,都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
class A{
A a1 = new A();
A a2 = new A();
}
a1.equals(a2)是false
扩展:String类型是引用数据类型,但是,根据不同情况,String存放在内存不同的地方,如果是String s=“qq”,则是放在栈内存的字符串缓冲池中,在缓冲池中有相同的字符串内容的变量将会被指向同一块内存。如果是String ss = new String(“qq”),则是放在堆内存中。
== 和equals() 方法的区别?
String的其他比较方法
- equalsIgnoreCase() 方法,不区分大小写进行判断。
- toLowerCase() 方法将字母转换成小写
- toUpperCase()方法将字母转换成大写
4.字符串连接
①使用+
②使用String类的concat()方法
字符串常用的提取方法
public int lastIndexOfchar/indexOf(char ch) 搜索 最后一个/第一个出现的字符ch的下标,没有返回-1
public int lastIndexOf / indexOf(String value)搜索 最后一个/第一个出现的字符串value的下标,没有返回-1
public String substring(int index) 提取从位置索引开始的字符串部分
public String substring(int beginindex,int endindex) 提取beginindex和endindex之间的字符串部分。
public String trim() 返回一个前后不含任何空格的调用字符串的副本(去空格)