各种常用类,hashcode相关,简单排序,二分查找,Date和DateFormat相关内容

StringBuffer类

线程安全的可变字符序列,可存储字符串,提供了对字符串操作的方法。

 

Stringbuffer和StringBuilder的区别

StringBuilder是StringBuffer的一个简易替换。用于字符串缓冲区被单线程使用的时候。通常StringBuilder效率要略高一点。但是StringBuffer更加安全

构造方法:

public StringBuffer():构造不带字符的字符串缓冲区。初始容量为16个字符

public StringBuffer(int capacity):构造指定容量的字符缓冲区

public StringBuffer(String str):构造有指定字符串的字符串内容。该字符串生成器的容量为16+指定字符串的内容

方法:

添加功能

public StringBuffer append(String str) 指定的字符串追加到字符序列

public StringBuffer insert(int offset,String str)将字符串插入到此字符序列中 offset偏移量

删除功能

public StringBuffer deleteCharAt(int index)删除指定索引位置上的字符

public StringBuffer delete(int start,int end)删除从start索引开始到end索引结尾的子字符串(包含头不包含尾)

替换功能

public StringBuffer replace(int start,int end,String string)包含头不包含尾的用指定字符替换对应位置的字符

反转功能

public StringBuffer reverse()将字符串进行反转

截取功能

public String substring(int start)从开始索引start开始截取到末尾的字符串

public String substring(int start,int end)从开始索引start截取到结束索引end-1的字符串(这两种截取本身StringBuffer没有发生改变)

 

 

 

Object类和String类在hashcode上的区别

public class Demo2 {

	public static void main(String[] args) {
//		Object类
		Test test = new Test();
		Test test2 = new Test();
		System.out.println(test.hashCode());
		System.out.println(test2.hashCode());
//		String类
		String string = new String("瓜皮");
		String string2 ="瓜皮";
		System.out.println(string.hashCode());
		System.out.println(string2.hashCode());
	}

}
class Test{
	String name="瓜皮";
	int age =16;
}

虽然String两种方式存储位置不同,一个在堆中,一个在方法区内的常量池中,但是String类的hashcode方法比较的是内容,源码如下

 public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

 

 

 

 

冒泡排序

思想:遍历数组元素,两两比较,发现大的元素就往后放,当第一次遍历结束时,最大值在最后面。下次遍历时最后一位就不参加比较了。

遍历总次数:数组长度-1

每次遍历比较的次数:数组长度-当前遍历的次数

//		i代表遍历的次数,最大遍历长度-1次
		for (int i = 1; i < arr.length; i++) {
//			j代表两两比较时前面那个数的索引位置,最大值为数组长度减去遍历所确定的位数
			for (int j = 0; j < arr.length - i; j++) {
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j + 1];
					arr[j + 1] = arr[j];
					arr[j] = temp;
				}
			}
		}

 

 

 

选择排序

思想:遍历数组元素,拿第一个索引对应的值和后面的元素值进行比较,一旦发现后面的值比第一个索引对应的值大的话,就将值互换,第一次遍历结束后,最大值就出现在了第一个索引的位置上。

一共遍历的次数:数组长度-1

每次遍历比较的次数:数组长度-当前遍历的次数

 

	public static void main(String[] args) {
		int[] arr={1,2,3,45,76};
		//i代表索引,从第一个开始比较到倒数第二个
		for(int i=0;i<arr.length-1;i++){
			//j代表被比较数,初始位置为第二个,比较到最后一个
			for(int j=i+1;i<arr.length;j++){
				int temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}

 

 

 

 

 

 

 

普通查找:使用for循环查找指定元素在数组中第一次出现的索引位置

二分查找:(有序数列)

1️⃣声明两个变量,分别表示开始索引和结束索引

int start =0;

int end =arr.length-1;

2️⃣判断开始索引是否小于等于结束索引,不满足条件,结束这个循环,返回-1表示没有找到指定元素key的值,如果满足计算中间索引值

int middle =(start+end)/2;

3️⃣拿中间索引对应的值和key作比较,如果两者的值相等,则说明中间索引就是我们要找的位置;

如果key大于中间索引对应的元素值

降序:end=middle-1

升序:start=middle+1

如果key小于了中间索引对应的元素值

降序:start=middle+1

升序:end=middle-1

4️⃣再返回到2️⃣,整体是用while循环比较合适

 

 

 

Arrays工具类(方法是静态的,没有构造方法Arrays.方法名直接调用)

主要封装了对数组的很多操作方法

static  int binarySearch(arr,key)二分法搜索

static int[] copyOf(original,int length)复制指定长度的数组,length小于则截取,大于则用0进行填充

static int[] copyOfRange(original,int from,int to)复制指定范围数组到新的数组,含头不含尾,依旧0填充

static Boolean equals(int[] a,int[] a)比较两个数组是否相等

static void sort(int[] a)对指定数组进行升序排序

static String toString(int[] a)返回指定数组的字符串形式

 

基本类型包装类:将基本数据类型封装成包装类可以给基本数据类型提供更多的方法

基本数据类最常见的操作就是和字符串之间进行转换,所以在包装类中都有这个转换的方法

8个基本数据类型对应8个包装类

byte      Byte

short     Short

int          Integer

long       Long

char       Character

boolean Boolean

double    Double

float         Float

JDk1.5新特性,自动装箱,Integer a=123;Character c='a';  int自动封装成Integer

String-int            Integer.parseint(String)

int-String            Integer.toString(int)

 

 

进制转换的方法

public static String toBinaryString(int i)将int值转换成二进制字符串表现形式

public static String toOctalString(int i)将int值转换成八进制字符串形式

public static String toHexString(int i)将int值转换成十六进制字符串形式

十进制到其他进制

public static String toString(int I,int radix)将转换成radix指定的进制数

其他进制到十进制

public static int parseInt(String s,int radix)使用第二个参数指定的基数,将字符串参数解析为有符号的整数

 

所有包装类和对应的基本数据类型都有自动装箱和拆箱的特性,数值类型的包装类都有和字符串相互转换的方法

Float.parseFloat(s)

Long.parseLong(s)

Byte.parseByte(s)

 

Character包装类概述和成员方法的使用:封装的char,内部提供了很多用于字符判断和转换的方法

public static boolean isUpperCase(char ch)判断参数字符是不是大写的

public static boolean isLowerCase(char ch)判断参数字符是不是小写的

public static boolean isDigit(char ch)判断参数字符是不是数字

public static char toUpperCase(char ch)将参数字符转换成大写

public static char toLowerCase(char ch)将参数字符转换成小写

 

 

Big类

BigInteger是可以存储int放不下的值

获取最大值   int maxValue =Integer.MAX_VALUE;2147483647

 

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)获取商和余数

 

 

BigDecimal类:由于java中对小数计算会存在精度损失,这时候java就提供了一个类用于小数计算

构造方法:通常使用public BigDecimal(String val)来进行构造,因为直接输入数值可能会发生精度损失

 

 

public BigDecimal add(BigDecimal val)加

public BigDecimal subtract(BigDecimal val)减

public BigDecimal multiply(BigDecimal val)乘

public BigDecimal divide(BigDecimal val)除

public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)除法  scale表示保留的小数位数   roundingMode表示舍入的模式

 

 

 

 

Math类和Arrays一样都是工具类,全是静态成员方法,调用即可

包含用于执行基本数学运算的方法,初等指数,对数,平方根和三角函数。

Math.abs().

public static int abs(int a)返回int的绝对值

public static double ceil(double a)向上取整double

public static double floor(double a)向下取整double

public static double pow(double a,double b)返回一参数以二参数为次方的值

public static double random()返回0-1的double值

public static int round(float a)返回四舍五入的int值

public static double sqrt(double a)求平方根

 

 

Random类:此类用于产生随机数

构造方法:

public Random()使用默认的种子产生的随机数,一般使用这个

public Random(long seed)使用我们自己给的一个种子用于产生随机数,使用相同的种子每次产生的随机数是一样的(注意是每一次,不是每一个)

成员方法:

public int nextInt()开始产生下一个随机数

public int nextInt(int n)产生的都是整数,而且是0到(n-1)

 

获得start到end之间的随机值?

int number= r.nextInt(end-start+1)+start             

int start=3;int end=5;

end-start=2;+1后范围是0~3再加start,3~5

 

 

System类:包含一些有用的类字段和方法,它不能够被实例化。也相当于工具类

成员方法

public static void gc()主动运行垃圾回收器(会造成卡顿)

public static void exit(int  status)退出JVM虚拟机status=-1.异常终止JVM虚拟机

public static long currentTimeMillis()获取当前时间和1970年零点零分之间的时间差,以毫秒为单位

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)数组的复制        五个元素依次是源数组,源数组开始的位置,目标数组,目标数组开始的位置,要复制的数组元素的长度

 

 

 

Date类:特定的瞬间,精确到毫秒

构造方法:

public Date()分配date对象并初始化对象,以表示分配它的时间

public Date(long date)将毫秒值封装成为对象

成员方法:

public long getTime()效果等同system类中的currentTimeMillis,将美式时间转换为毫秒值

public void setTime(long time)设置此Date对象

 

 

 

SimpleDateFormat类:其父类为抽象类DateFormat类,用于格式化(日期-文本)和解析(文本-日期)日期

构造方法:

public  SimpleDateFormat()使用默认模板创建一个格式化日期类对象

public  SimpleDateFormat(String pattern)使用给定的模式和默认的语言环境的日期格式符号构造SimpleDateFormat

 

SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

 

调用format之后:2017-09-07 20:32:49

 

 

成员方法:

 

 

public final String format(Date date)将一个date格式化为日期/时间字符串

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值