Java总结 1104/1105

A: 数组 
1.选择排序:
数组0的索引依次和后面的进行比较,对应的元素小的往前放,依次比较,这样就可以得到一个排好序的数组
程序代码:
public static void selectSort(int [] arr){
for(int i=0; i<arr.length; i++){
for(int j=i+1; j<arr.length-1; i++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}

}
2.二分查找:
针对的数组一定是有序的
1)定义最小索引和最大索引
  2)计算出中间索引
  3)拿中间索引对应的元素和要查找的元素进行比较
  如果相等:直接返回中间索引
  不相等:
  大了,左边找
  小了,右边找
  4)重新获取最小索引和最大索引,计算出中间索引
  5)回到3)继续查找
程序代码:
public static int getIndex(int [] arr , int value){
int min = 0;
int max = arr.length-1;
int mid = (min+max)/2;
while(arr[mid] != value){
if(arr[mid] > value){
max = mid-1;
}else if(arr[mid] < value){
max = mid+1;
}
if(min > max){
return -1;
}
mid = (max+min)/2;
}
return mid;
}
3.Arrays类:
Arrays:此类包含用来操作数组(比如排序和搜索)的各种方法(针对数组操作的工具类)
常用的几个方法:
public static String toString(int[] a):将任意类型的数组以字符串形式显示出来!
  public static void sort(int[] a):快速排序:(将给定数组中元素升序排序)
public static int binarySearch(int[] a, int key):当前int数组一定是有序数组
使用二分搜索法来搜索指定的 int 型数组,以获得指定的值
B: BigDecimal: 
对于浮点类型的数据类说,他们存储和整数的存储是不一致的,是按照有效数字位来进行存储的,浮点类型的数据计算的时候
容易损失精度,计算出来的结果不精确,Java针对这种情况:提供了这个
BigDecimal:
作用:来提供浮点类型数据的精确计算!可变的、任意精度的有符号十进制数
构造方式:
public BigDecimal(String val)

public BigDecimal(String val)
常用的成员方法;
public BigDecimal add(BigDecimal augend):加
public BigDecimal subtract(BigDecimal subtrahend):减
public BigDecimal multiply(BigDecimal multiplicand):乘法
public BigDecimal divide(BigDecimal divisor):除
public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
参数1:商, 参数2:保留几位小数, 参数3:舍入的一种模式:ROUND_HALF_UP
C: BigInteger: 
BigInteger的构造方法
public BigInteger(String val)将字符串表示的数字封装成BigInteger类型
成员方法:
public BigInteger add(BigInteger val)
public BigInteger subtract(BigInteger val)
public BigInteger multiply(BigInteger val)
public BigInteger divide(BigInteger val)
public BigInteger[] divideAndRemainder(BigInteger val)
返回一个BigInteger数组,数组中的元素:商,余数

D: Calendar: 
Calendar:日历类:
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,
并为操作日历字段(例如获得下星期的日期)提供了一些方法
Calendar该类是一个抽象类:不能实例化的,所以通过一下这个方法来创建对象
public static Calendar getInstance()
public int get(int field)返回给定日历字段的值

public static final int YEAR:表示日历中 的年
public static final int MONTH:月份:是0开始计算的
public static final int DATE:和DAY_OF_MONTH是同义词,表示月份中的某天
Calendar常用的成员方法:
public abstract void add(int field,int amount)
为给定的日历的字段添加或者减去时间偏移量
public final void set(int year,int month,int date)
设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值


E: Date类:
Date类:日期类:
  表示特定的瞬间,精确到毫秒。
常用的构造方式:
  public Date():表示分配的一个Date对象:无参: 通过无参构造获取当前系统的具体的时间
  public Date(long date):指定一个时间毫秒值  和它1970-1-1 00:00:00有时间差
Date中的两个成员方法
public long getTime():获取当前时间毫秒值
如果知道Date对象,可以通过getTime()获取时间毫秒值
public void setTime(long time)

F: SimpleDateFormat类:
将Date对象--->String类型的日期的"文本格式":格式化
public final String format(Date date)
String类型日期的"文本格式"---->Date日期对象:解析
public Date parse(String source) 该方法本身会抛出一个异常:ParseException(解析异常:编译时期异常)
要进行转换:必须使用中间桥梁:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和标准化
但是,DateFormat是抽象类,不能直接实例化,使用的是它更具体的子类进行实例化:
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
常用的构造方法:
Date---格式化--->String文本格式
public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
日期和时间模式
y 比如:2017---->yyyy
M 年中的月份:2------>MM
d   月份中的天数 :----->dd
H 小时 HH
m 小时中的分钟数 mm
s 分钟中的秒数 ss
注意事项:
一定要保证SimpleDateFormat中的String Pattern这个模式和当前给的字符串的文本格式的模式必须一致!


G: Math类:
Math类提供了一些数学运行的方法
常用的成员方法:
  public static int abs(int a):绝对值
  public static double ceil(double a):向上取整
  public static double floor(double a):向下取整
  public static double max(double a,double b):获取最大值
  public static double min(double a,double b):获取最小值
  public static double pow(double a,double b):a的b次幂
  public static double random():取值范围:[0.0,1.0)
  public static long round(double a):四舍五入
  public static double sqrt(double a):一个数的正平方跟

H: System类:
System:该类没有构造方法,所以字段和成员方法都用静态修饰
常用的两个字段:
  in ,out都和流有关系:java.io...
  
  PrintStream(字节打印流) ps = System.out ; 标准输出流
  PrintWriter(字符打印流)
 
  InputStream  in =  System.in; 标准输入流
  
  常用的成员方法:
  public static void gc()运行垃圾回收器。 
调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存,
最终调用的就是重写之后finalize()回收不用的对象!
public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length)
指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
public static long currentTimeMillis():返回当前的时间毫秒值

I: 正则表达式:
正则表达式常用的语法:
A:字符
x 字符 x :任意的字符
\\ 反斜线字符 在代码中书写正则表达式:\------>用两个\\代表一个反斜线
\t 制表符 ('\u0009')
\n 新行(换行)符 ('\u000A') IO流中要写入换行符号:windows "\r\n"
\r 回车符 ('\u000D') 


B:字符类
[abc] a、b 或 c(简单类) 

[^abc] 任何字符,除了 a、b 或 c(否定) 

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) :当前字母大小均可

C:预定义字符类


. 任何字符 邮箱里面:如果本身就是.,那么在写正在表达式的时候,\.将当前.转义

\d 数字:[0-9] \d在正则表达式应用的时候:[0-9]--->\\d

\w 单词字符:[a-zA-Z_0-9]:简单一些字符串,单词字符(规则:数字或者字母)
javascript:[a-zA-Z0-9]
D:边界匹配器
^ 行的开头 
$ 行的结尾
\b 单词边界 :
hello;world:haha:xixi
E:Greedy 数量词
X? X,一次或一次也没有 
X* X,零次或多次
X+ X,一次或多次 
X{n}    X,恰好 n 次 
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次 

String类的特有功能
public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。
String的分割功能:
public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串
返回值类型是一个字符串数组类型
String类中的替换功能:和正则表达式有关系
public String replaceAll(String regex,String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

J: Collection(集合):
集合的由来:
 我们学习java的语言,是一种面向对象语言,面向对象语言对事物的描述是通过对象体现出来的,那么存储很多个学生,就需要使用容器变量进行存储
 目前:学习过哪些容器变量呢?
数组,StringBuffer/StringBuilder,对于数组来说,数组的长度是固定的,不符合实际需求(长度不可变);对于StringBuffer来说始终在内存中返回
 的是字符串类型,也不满足元素类型变化的要求;所以,Java就提供了一个技术:集合!
 面试题:
集合和数组的区别?
1)长度的区别:
数组:长度是固定的;
集合:长度是可变的
2)存储数据类型的区别:
数组:可以存储引用类型,可以存储基本数据类型
集合:只能存储引用类型
3)存储元素的区别
数组:在同一个数组中,只能存储同一种数据类型的元素;举例 数组:杯子:只能装水
集合:可以 存储多种数据类型的元素;   举例:集合:杯子:装水,其他饮料...
 
 集合是可以存储多种类型的元素,但是,需求如果变化,针对集合来说,Java提供了很多集合类,每一种集合类的数据结构不一样,所以,将他们之间的共性内容抽取出来,就行了
 一个集合的继承体系图!
 
 数据结构:存储数据的方式
 
 Collection: 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。
 一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现
 
 Collection的一些功能
 添加功能:
boolean add(Object e):给集合中添加指定的元素
boolean addAll(Collection c):添加一个集合中的所有元素
 删除功能:
void clear():删除一个集合中的所有元素,暴力删除,(不建议使用)
boolean remove(Object o):删除一个集合中的指定元素
boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?
 判断功能:
boolean contains(Object o):判断一个集合中是否包含指定的单个元素
boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有.
boolean isEmpty():判断集合是否为空,如果为空,则返回true

 交集功能:
boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?
 获取功能;
int size():获取集合中的元素数
Iterator<E> iterator():迭代器
 转换功能:
Object[] toArray():将集合转换成数组
 
 面试题:
数组中有没有length(),String类中有没有length(),集合中有没有length()?
数组:length属性
String:length()
集合中:size()
 集合的高级功能:
boolean addAll(Collection c):添加一个集合中的所有元素
boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?
boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有
boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?
面试题:
A集合对B集合取交集,那么交集的元素去A集合里面了,并且返回值boolean表达的意识是A集合中的元素是否发生变化,
如果发生变化,就返回true;否则,false
 
集合的专有遍历方式:使用集合自己本身迭代功能遍历集合中的元素
Iterator iterator():迭代器
Iterator:迭代器:接口
成员方法:Object next()返回迭代的下一个元素:获取功能
 boolean hasNext():判断一个集合中是否有下一个可以迭代的元素:判断功能
注意::::
<迭代器第一定义只能遍历一次  如果想再遍历的话需要重新创建Iterator对象>

K: List(集合):
List集合的特有功能:
添加功能:
删除功能:
Object remove(int index)移除列表中指定位置的元素,返回被删除的元素
获取功能:
ListIterator listIterator():列表迭代器:List集合的专有遍历方式
Object get(int index)返回列表中指定位置的元素。
替换
set(int index,Object element)用指定元素替换列表中指定位置的元素
List集合的遍历方式
1)toArray()
2)Collection集合中的Iterator iterator();
3)使用get()方法 和size()方法

List集合的列表迭代器

ListIterator listIterator()
列表迭代器接口中有以下几个方法:
boolean hasNext():判断是否有下一个可以迭代的元素(正向遍历)
Object next():如果有可以遍历的元素,就获取这个元素
 
boolean hasPrevious():判断是否有上一个可以迭代的元素(逆向遍历)
Object  previous():如果有上一个可以迭代的元素,就获取上一个元素
注意:
要使用逆向遍历,前提必须有正向遍历存在,直接使用逆向遍历,没有意义!

问题?
我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,
如果有,我就添加一个"javaee"元素,请写代码实现
并发(同一个时间点),并行(同一个时间段)
java.util.ConcurrentModificationException:并发修改异常:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
原因:当前我们用迭代器去遍历元素,使用集合添加的元素,对于迭代器不知道集合添加了这个元素,所以会发生这个异常
描述:使用迭代器去遍历集合,是不能直接集合添加元素!
解决方案:
1)使用迭代器遍历集合,使用迭代器添加元素
2)使用集合遍历,使用集合添加元素

1)//方案1:1)使用迭代器遍历集合,使用迭代器添加元素
Iterator it = list.iterator() ; 该迭代器中没有添加功能,List集合中的专有遍历方式:列表迭代器有添加功能:add(Object obj)
//将指定的元素插入到列表中(指定元素后面插入)
//ListIterator it = list.listIterator() ;
while(it.hasNext()){
String s = (String) it.next() ;

//判断
if("world".equals(s)){
//使用迭代器添加
it.add("javaee") ;
}
}

2) for(int x = 0 ; x <list.size() ; x ++){
String s = (String) list.get(x) ;
//判断
if("world".equals(s)){
//集合添加
list.add("javaee") ;//在末尾添加元素
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值