11.04内容
一、二分查找
二分查找的前提是数组必须是排好序的!
从中间位置开始查找,将所要查找的元素与中间位置的元素进行比较。(假设一个数组是从小到大排列的)则若是要查找的元素比中间元素大的话就往右找,若小于中间元素就往左找,若恰好是中间元素则返回中间元素的索引即可!
还有若是查找无序数组中的元素时,建议用一般方法查找即可!因为如果用二分法查找的话就需要先给数组排序,排序后所要查找的元素索引就改变了!没有意义!
二、public BigDecimal(String val) 可以用来进行任意精度浮点类型数据的的十进制计算!
由于浮点类型数据在参与计算时容易损失精度,所以Java针对这一现象设计了此方法!
成员方法:
1、 public BigDemical add( BigDemical augend ) 加
2、 public BigDemical subtract(BigDemical subtrahead) 减
3、 public BigDemical multiply(BigDemical mutiplicand) 乘
4、 public BigDemical divide(BigDemical divisor) 除
5、 public BigDemical divide(BigDemical divisor , int scale, int roudingMode) 参数意义: 商 保留几位小数 舍入的一种模式
三、BigInteger 用来计算超出Integer范围的数据
构造方法:public BigInteger(String val) 封装数字的字符串表示形式
其成员方法:
1、public BigInteger add(BigInteger val) 加
2、public BigInteger subtract(BigInteger val) 减
3、public BigInteger multiply(BigInteger val) 乘
4、public BigInteger divide(BigInteger val) 除
5、public BigInteger[] divideAndRemainder(BigInteger val) 返回的是一个BigInteger数组,元素为商和余数
四、Calendar 日历类(抽象类)
由于为抽象类所以不能实例化;只有通过getInstance()来进行实例化!
Calendar calendar=Calendar.getInstance();
public static Calendar getInstance()
public int get(int field)返回给定日历字段的值
方法:
1、public static final int YEAR:表示日历中的年
2、public static final int MONTH:表示从0开始的月份
3、public static final int DATE:表示月份里的某一天,相当于DAY_OF_MOMTH
4、public abstract void add(int field,int amount) 为给定的日历字段添加或者减去时间偏移量
c.add(Calendar.YEAR, 5); 五年后
c.add(Calendar.DATE, -10) ; 10天前
5、public final void set(int year,int month,int date) 设置日历字段 YEAR MONTH DAY_OF_MONTH的值
c.set(2018,5,20) ;
五、Date(日期类): 表示特定的瞬间,精确到毫秒。
1、创建对象: Date d = new Date() ;
2、构造方式: public Date(): 表示分配的一个Date对象,无参(通过无参构造可以获取到当前具体的系统时间)
public Date(long date): 指定一个时间毫秒值 和1970-1-1 00:00:00由时间差
3、成员方法: public long getTime(): 获取当前的时间毫秒值
public void setTime(long time)
currentTimeMillis());//通过System可以获取当前时间的毫秒数
4、Date对象和String类型日期的“文本格式”的互相转换:
1)将Date对象--->String类型的日期的"文本格式":格式化
pubilc final String format(Date date)
2) String类型日期的"文本格式"---->Date日期对象:解析
public Date parse(String source) 此方法会抛出一个异常 ParseException 解析时期异常
可以用中间桥梁DateFormat进行转换!
DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
由于是抽象类所以不能进行实例化,因此要用其子类进行实例化(SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类)
5、SimpleDateFormat的构造方法:public SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
6、时间和日期的模式
y ---------------------- 年 ------------------------ yyyy
M --------------------- 月份 ---------------------- MM
d --------------------- 天数 ---------------------- dd
H --------------------- 小时 ----------------------- HH
m -------------------- 分钟 ----------------------- mm
s --------------------- 秒数 ---------------------- dd
一定要保证SimpleDateFormat中的String Pattern这个模式和当前给的字符串的文本格式的模式必须一致!多一个或少一个空格都不可以!!!!
六、Math类
成员方法:1、public static int abs(int a): 绝对值
2、public static double ceil(double a): 向上取整
3、public static double floor(double a): 向下取整
4、public static double max(double a,double b): 获取最大值
5、public static double min(double a,double b): 获取最小值
6、public static double pow(double a,double b): a的b次幂
7、public static double random(): 取值范围:[0.0,1.0)
8、public static long round(double a): 四舍五入
9、public static double sqrt(double a): 一个数的正平方跟
import static java.lang.Math.abs; //静态导入()import static ,直接导入方法
七、System类(无构造方法,所有字段和方法都被static修饰)
常用的成员方法:
public static void gc() 运行垃圾回收器。
public static void exit(int status) 终止当前正在运行的 Java 虚拟机。
public static long currentTimeMillis():返回当前的时间毫秒值
public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length) 在源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
调用 gc 方法暗示 Java 虚拟机回收未用对象,以便能够快速地重新使用这些对象当前占用的内存,最终调用的就是重写之后的finalize()回收不用的对象!
11.05内容
一、集合
学过的容器变量有:数组,StringBuffer,StringBuilder,集合
面试题:
集合和数组的区别?
1)长度的区别:
数组:长度是固定的;
集合:长度是可变的
2)存储数据类型的区别:
数组:可以存储引用类型,可以存储基本数据类型
集合:只能存储引用类型
3)存储元素的区别
数组:在同一个数组中,只能存储同一种数据类型的元素;举例 数组:杯子:只能装水
集合:可以存储多种数据类型的元素;
Collection: 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。
1、Collection的功能
1、 添加功能:
boolean add(Object e):给集合中添加指定的元素
boolean addAll(Collection c):添加一个集合中的所有元素
2、 删除功能:
void clear():删除一个集合中的所有元素,暴力删除,(不建议使用)
boolean remove(Object o):删除一个集合中的指定元素
boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?
3、 判断功能:
boolean contains(Object o):判断一个集合中是否包含指定的单个元素
boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有.
boolean isEmpty():判断集合是否为空,如果为空,则返回true
4、 交集功能:
boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?
5、获取功能;
int size():获取集合中的元素数
Iterator<E> iterator():迭代器
6、转换功能:
Object[] toArray():将集合转换成数组
面试题:
数组中有没有length(),String类中有没有length(),集合中有没有length()?
数组:length属性
String:length()
集合中:size()
2、集合的高级功能:
boolean addAll(Collection c): 添加一个集合中的所有元素
boolean removeAll(Collection c): 删除一个算是删除
boolean containsAll(Collection c): 包含所有算是包含
boolean retainAll(Collection c): 交集的元素去A集合里面了,A集合中的元素如果发生变化,就返回true;否则,false
3、Object[] toArray(): 可以将集合转换成数组
二、迭代器:集合的专有遍历方式:使用集合自己本身迭代功能遍历集合中的元素
Iterator iterator():
成员方法:
获取功能: Object next() 返回迭代的下一个元素:
判断功能: boolean hasNext(): 判断一个集合中是否有下一个可以迭代的元素:
注意:存储自定义对象使用迭代器遍历,it.next()不要使用多次,否则会出现异常
三、List(该集合是一个有序的集合(存储元素和取出元素是一致的! 并且集合中的元素是可以重复的)
1、List集合的特有功能:
添加功能:
void add(int index, Object element)在列表的指定位置插入指定元素
删除功能:
Object remove(int index)移除列表中指定位置的元素,返回被删除的元素
获取功能:
ListIterator listIterator():列表迭代器:List集合的专有遍历方式
Object get(int index)返回列表中指定位置的元素。
替换
set(int index,Object element)用指定元素替换列表中指定位置的元素
2、List集合的遍历方式
1)toArray()
2)Collection集合中的Iterator iterator();
3、 List集合的列表迭代器
ListIterator listIterator()
列表迭代器接口中有以下几个方法:
boolean hasNext():判断是否有下一个可以迭代的元素(正向遍历)
Object next():如果有可以遍历的元素,就获取这个元素
boolean hasPrevious():判断是否有上一个可以迭代的元素(逆向遍历)
Object previous():如果有上一个可以迭代的元素,就获取上一个元素
注意:
要使用逆向遍历,前提必须有正向遍历存在,直接使用逆向遍历,没有意义!
4、java.util.ConcurrentModificationException:并发修改异常:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
原因:当前我们用迭代器去遍历元素,使用集合添加的元素,对于迭代器不知道集合添加了这个元素,所以会发生这个异常
描述:使用迭代器去遍历集合,是不能直接集合添加元素!
解决方案:
1)使用迭代器遍历集合,使用迭代器添加元素
2)使用集合遍历,使用集合添加元素
5、String的分割功能:
public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。 返回值类型是一个字符串数组类型
5、String类中的替换功能:和正则表达式有关系
public String replaceAll(String regex,String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。