Object类的HashCode()方法.
Object类的getClass()方法.
Object类的toString()方法.
Object类的equals()方法.
==号和equals的区别
Scanner 键盘录入的方式
Scanner 键盘录入的常见问题
解决方案
String 类
equals 比较
contains 包含
startsWith 开头
endsWith 结尾
isEmpty 空
length 长度
charAt 字节数组
indexOf 索引
toCharArray 字符串转字符数组
valueOf 把字符数组转成字符串
replace 替换
trim 清除两边空格
StringBuffer,StringBuilder,String的区别
append()方法 添加
replace()方法 替换
reverse()方法 删除
substring()方法 重写
冒泡,选择,二分查找
Arrays类的使用//Arrays就是数组的一个工具类
toString() 重写
sort() 排序
binarySearch() 二分查找发
String 和 StringBuffer 的互相转换
String--->StringBuffer StringBuffer 构造函数转换,append()
StringBuffer--->String toString,valueOf,+"",subString
任意类型和 String 之间的互相转换
1,toString();
2,valueOf(Object obj);
3,任意类型+""
public String[] split(String regex)//切割功能.但是切割的时候要注意首尾
public String replaceAll(String regex,String replacement)//替换功能
按点切割,如何?
输出一个反斜杠如何?
Random类
伪随机数,根据种子算出来的随机数。
System类:"不能为实例化"
* public static void gc()//了解,通知并不立刻执行
* public static void exit(int status)//掌握
* public static long currentTimeMillis()//掌握
获取毫秒值的两种方法
BigInteger类:
BigDecimal类 有什么用?什么时候用?
,最起码要判断有没有(hasNext),
集合体系图
数组和集合得不同
数组:可存储基本数据类型和引用数据类型
集合:只能存储引用数据类型,存100的时候自动装箱
迭代器:
并发修改异常
"用迭代器迭代的过程中,不能改变集合的长度"
解决方案:
不能让集合修改元素。
用迭代器自己修改元素
ListIterator 是 List 集合特有的迭代器
ArrayList 如何去除重复元素
栈和队列数据结构特点:
* 栈
* 先进后出
* 队列
* 先进先出
泛型:
就是一个过滤器,满足条件的才能赋值,不满足条件的就不能进行赋值
常规使用:集合中。
泛型的好处://会用就行 不用记录
* 提高安全性(将运行期的错误转换到编译期)
* 省去强转的麻
? extends E
向下限定,E及其子类 //?读作“什么”。什么继承于E。即E的
子类。
addAll(? extends E) //可添加E或者E
的子类对象
? super E //?读作“什么”。什么的爸爸E。即E的爸爸。
向上限定,E及其父类
增强for //底层是迭代器
好处: 简化遍历书写
for(int i : arr){ //arr 要遍历的集合 i接收的参数
System.out.println(i); //i就是集合中的每一个参数
}
缺点: 不能删除添加
只能遍历
集合的三种遍历方式:
静态导入:只要知道是JDK 1.5的新特性即可
//暴露实际开发经验的地方,开发千万不要写
//一般有经验的java程序员都不写,甚至忘记这个东西。
写法:
* import static 包名….类名.方法名; 把静态方法导入
JDK1.5的新特性:
增强的“for”循环(Enhanced For loop)
泛型(Generics)
枚举(Type safe enums)
可变参数(Var args)
自动装箱/ 自动拆箱(Autoboxing/unboxing)
静态导入(Static import)
互斥锁
HashSet 存储顺序不一致 也不保证该顺序一直不变
如何保证元素的唯一性:
重写hashCode() 和 equals()方法
HashSet存储自定义对象保证元素唯一性:
1.HashSet原理
当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希
值, 然后在集合中查找是否有哈希值相同的对象
如果没有哈希值相同的对象就直接存入集合,这个时候就不调用equals()了。
如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为
false就存入, true则不存。存入时挂在同hashCode()值的元素下面。
2.将自定义类的对象存入HashSet去重复
类中必须重写hashCode()和equals()方法
hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储
LinkedHashSet的概述和使用:
HashSet 的儿子
底层是链表实现的,是set集合中"唯一一个能保证怎么存就怎么取的集合对象"
因为是HashSet的子类,所以也是保证元素唯一的,与HashSet的原理一样
TreeSet
存储顺序不一致,二叉树结构,小的存左边(负数),大的存右边(正数),相等就不存(0)。用来对
象进行排序。
TreeSet 存储自定义对象
实现 Comparable 接口 重写compareTo()方法
当compareTo方法返回0的时候,集合中只有一个元素。
当compareTo方法返回正数的时候集合会怎么存就怎么取
当compareTo方法返回负数的时候集合会倒序存储
构造一个比较器进行比较
两种方式的区别
TreeSet 构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错
ClassCastException)
TreeSet 如果传入Comparator, 就优先按照Comparator
TreeSet 不去重
Map 集合
双列集合
键唯一,值不唯一,键跟值一一对应
Map 接口和 Collection 接口的不同
Map是双列的(是双列集合的根接口),Collection是单列的(是单列集合的根接口)
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构值针对键有效,跟值无关;如:TreeMap:键是用二叉树算法,HashMap:
键是hash算法
Collection集合的数据结构是针对元素有效
Map 集合的遍历方式
LinkedHashMap:
底层是链表实现的可以保证怎么存就怎么取
统计字符串中每个字符出现的次数:
1,可用数组实现,原理较复杂。有兴趣的同学可以找我单聊
2,map集合实现较为简单
HashMap和Hashtable 的区别
Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率
高
Hashtable不可以存储null键和null值,HashMap可以存储null键和null值
异常:
Throwable
|--Error
|--Exception --- RuntimeException
--- 编译时异常
面试题:
"常见的异常" 3到5个 切入到自己的实际开发,并以市场上QQ或者微信做比
较
面试:
切入到自己的实际开发,怎么处理的。并以市场上QQ或者微
信做比较
点招:
切入到自己的基础班写代码的时候,怎么处理的。
空指针异常 NullPointerException "
最多" 找不到这个类 ClassNotFoundException
数组角标越界异常 ArrayIndexOutOfBoundsException 类型转换异
常 ClassCastException
文件未找到异常 FileNotFoundException
算术异常类 ArithmeticException
自己处理异常的方式:
1,自己处理,三种写法。
* try catch
* try catch finally
* try finally
try:用来检测异常的
catch:用来捕获异常的。多个catch中,父类异常要写在下面,如果父
类异常写在上面,则子类异常捕捉的不执行。
finally:释放资源
try 中一旦有错误,下面代码不执行,立马转到对应错误 catch 中代
码,最后转入 finally 中。
finally 执行完毕,跳出 finally ,程序继续执行。
finally 的代码一定会执行,除非虚拟机 System.exit() 停止。
如果报的异常没有对应的 catch ,则等于没有写try catch。程序照
常报错。
2,throws 抛出方式处理异常
编译时异常的抛出必须对其进行处理
运行时异常的抛出可以处理也可以不处理
用一个方法,如果此方法抛出一个异常,运行时异常可处理也可不处
理,如果抛出编译时异常,则必须处理。
throws和throw的区别:
throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
编译期异常和运行期异常的区别:
编译时异常:
在编译某个程序的时候,有可能会有这样那样的事情发生,比如文件找不到,这样
的异常就必须在编译的时候处理
如果不处理编译通不过。
运行时异常:
就是程序员所犯得错误,需要回来修改代码。
面试题://为了面试而产生的题目,实际没有一点意义
* final,finally和finalize的区别。自己补充
* 如果catch里面有return语句,请问finally的代码还会执行吗?如果会,请问是在return前还是return后
。
return 建立返回路径的同时执行finally,不会改变变量赋的值。然后再 return 出去。//正常情况下不
会有这种情况,记住即可,不用深入研究
此时如果finally中还有return语句,会覆盖返回路径,改变值。//正常情况下不会有
这种情况,记住即可,不用深入研究,
//如果在finally写返回语句,那么try和catch的结果都会被改变,所以这么写
就是犯罪
自定义异常:
通过名字区分到底是神马异常,有针对的解决办法 举例:人的年龄
//系统中的异常也是取个名字而已,没有方法,都是父类来做的
自定义异常概述
* 继承自Exception
* 继承自RuntimeException
写法:
写一个Exception继承Exception,RuntimeException 。实现父类构造。使用的时候直接new就可
以了。
IO流:
"对一个路径进行判断或者操作,这个路径可以是文件也可以是文件夹。"
File更应该叫做一个路径
* 文件路径或者文件夹路径
* 路径分为绝对路径和相对路径
* 绝对路径是一个固定的路径,从盘符开始
* 相对路径相对于某个位置,在eclipse下是指当前项目下,在dos下
|