Java基础5(常用类)

常用类


 Object:是类层次结构的根类.每个类都使用 Object 作为超类(父类)

 

public int hashCode()返回该对象的哈希码值.  把它理解地址值(

是实际意义的地址值)

public final Class getClass()返回此 Object 的运行时类

Class类中有一个方法:

public String getName()String 的形式返回此

Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

 

public boolean equals(Object obj)

指示其他某个对象是否与此对象“相等”。

 

 ==:比较的值相等(地址值)

 equals:本身属于Object类中的方法,默认比较的是地址值是否相同

 

 按照正常情况:equals方法底层实际执行的两个对象在==,比较是地址值;假如:学生的年龄和姓名一致,看成同一个人

 

 在自定义的类中,重写Object中的equals()方法,比较是两个对象的成员变量的值是否相同.

 自动生成即可!

 

Object中的equals方法

public boolean equals(Object obj) {

        return (this == obj); //在底层实际走了一个==:比较的是地址值

        //this:s1

        //obj:s2

    }

 

 

 

(重写后的内容比较的是)

/重写了Object中的equals方法

@Override

public boolean equals(Object obj) {//传入对对象

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())//this.getClass ();正在运行的那个类: class 包名.类名

return false;

Student other = (Student) obj;//向下转型

if (age != other.age)//this.age  other:传入的s2

return false;

if (name == null) {//this

if (other.name != null) //传入的姓名的值是否为null

return false;

} else if (!name.equals(other.name))

return false;

return true;

}

 

 

Object中的一个方法:

  public String toString(); 回该对象的字符串表示

 public static String toHexString(int i):以十六进制表示对字符串形式

  

 直接输出对象名称:实际执行了Object中的toString(),输出的全类名@十六进制数据

  

 我现在输出对象名称,不想让toString()直接输出的是一个地址值(对象的地址值)

 

 就需要重写Object中的toSring(),一般情况:自动生成即可  建议所有子类都重写此方法。

 

自动生成重写后的toString方法

 @Override

public String toString() {

return "Student [name=" + name + ", age=" + age + "]";

}

 

 

Scanner: 简单文本扫描器。

  

 回想:键盘录入的步骤

  1)需要创建键盘录入对象

  Scanner sc =new Scanner(System.in);

  2)导入包:import java.util.Scanenr;   ctrl+shift+o

  3)接收数据

  XXX 变量名= sc.nextXXX();

 

 构造方法:

 public Scanner(InputStream source): 以输入流的形式录入数据的

 InputStream:字节输入流:

 

 InputStream  in = System.in ; //底层执行返回的是一个字节输入流(标准输入流)

 

 Scanner类的一些常见的方法:

 XXX 变量名 = 键盘录入对象.nextXXX();

 Scanner类中它提供一个判断功能:

 public boolean hasNextXXX():当前扫描器判断是否有下一个可以录入的XXX类型数据

 nextXXX();

 

问题:

  键盘录入两个int类型的数据,分别输出,没有问题

 键盘录入两个String类型的数据,分别输出:没有问题

  先录入一个String类型的数据,在录入int类型的数据,没有问题

  先录入一个int类型的数据,在录入String类型的数据,有问题,第二个数据是字符串类型,又由于录入下一个数据要"空格"本身是一个字符串

  b是空格,b的值没有录入!

  如何解决:重写创建键盘录入对象

 

 

 

 

String:

String:表示字符串:

  字符串是常量;它们的值在创建之后不能更改。

String是一种特殊的引用类型:

  默认值:null

 

 

 

构造方法:

String():无参构造

String(byte[] bytes) :将字节数转换成字符串

public String(byte[] bytes, int index,int length):将字节数组的一部分转换成字符串

public String(char[] value):将字符数组转化成字符串     toCharArray():将字符串转换成字符

 public String(char[] value, int index, int count):将字符数组的一部分转换成字符串

 public String(String original):将一个字符串常量构造成一个字符串对象

 

 

常用的方法:

public int length()返回此字符串的长度

 

 

 

面试题:

数组中有没有length(),字符串中有没有length(),集合中有没有length()?

数组中没有length()方法,只有length属性

字符串中有length()

集合中没有length(),获取集合的元素数:size() (后面讲)

 

 

String字符串的最大的特点:

  字符串一旦被赋值,其值不能被改变

 

 

面试题:

 String s1 = new String("abc");

 String s1 = "abc" ;

 

  这两个分别创建了几个对象?

 

  ==:比较的是地址值

  equals:默认的比较是地址值,String底层重写了equals方法,所有比较的内容是否相同

 

 

 

 

String类的常用的判断功能

 

  boolean equals(Object obj):将此字符串与指定的对象比较

boolean equalsIgnoreCase(String str)将此 String 与另一个 String 比较,不考虑大小写

boolean contains(String str):判断当前大川中是否包含子字符串  (重点)

boolean startsWith(String str):以当前str字符串开头(重点)

boolean endsWith(String str):以当前str字符串结尾(重点)

boolean isEmpty():判断字符串是否为空

public String concat(String str):字符串的特有功能:拼接功能和+拼接符是一个意思

 

 

 

 

 

String类的常用获取功能:

 

  public int length():获取字符串的长度

  public char charAt(int index)返回指定索引处的 字符

  public int indexOf(int ch)返回指定字符在此字符串中第一次出现处的索引

  问题:既然传入的字符:这里为什么用int类型

  'a'97 都表示a

  public int indexOf(int ch,int fromIndex)返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

  public int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引

  public int  indexOf(String str,int fromIndex)回在此字符串中第一次出现指定字符串处的索引,从指定的索引开始搜索。

  

截取功能

  public String substring(int beginIndex):从指定位置开始截取,默认截取到末尾,返回新的字符串

  public String substring(int beginIndex, int endIndex):从指定位置开始到指定位置末尾结束,包前不包含

 

 

compareTo函数()

比较两个String类型的字符串  返回较短String的的长度

 

 

应用:

 需求:需要遍历一个字符串:

 

  String s = "helloworld"; 

//利用charAtlength()  使用for循环遍历

 

for(int x = 0 ;x < str.length();x++) {

System.out.println(str.charAt(x));

}

 

 

 

需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)

helloWORLD

如何实现:

 

截取一个字母:转换为大写

从下标1开始截取到结束,转换给小写.

 

然户将两个字符串拼接

 

String s = helloWORLD;

String s1 = s.substring(0, 1) ;

//在截取除了第一个字符以为的其他字符

String s2 = s.substring(1);

//s1转换成大写

String s3 = s1.toUpperCase() ;

//s2转换成小写

String s4 = s2.toLowerCase() ;

//s3s4拼接

String result = s3.concat(s4) ;

System.out.println("result:"+result);

 

 

StringBuffer:线程安全的可变字符序列

线程安全即代表了数据是同步的,但是由此又导致了执行效率低下

例如:

银行网站:它的每个步骤都需要确认,由此它是安全,但是也是效率低下的

线程不安全即代表了不同布,不安全,但是由此使得下次效率变高

 StringBufferString的区别?

   前者是一个可变的字符序列,后者是不可变的字符序列

   如果从内存角度考虑,String定义的时候,会在常量池中开辟空间,比较耗费内存

   StringBuffer,字符串缓冲区(里面存储的全部都是字符串),它会释放掉

 

 

 StringBuffer的构造方法:

 StringBuffer() :无参构造的形式,初始容量16     :如果赋值超过了该初始容量,容量会以现在有的容量为准

 

 StringBuffer(int capacity) :指定容量构造一个字符串缓冲区

 

 

 StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容,值得注意的是该容量为 初始容量+当前字符数

 

 

注意:StringBuffer sb = 嘿嘿;

这是错误的,不能直接将一个字符串类型赋值给StringBuffer.类型.

 

 

StringBuffer添加功能(这是实际开发中应用最多的)

 

public StringBuffer append(String /boolean...) :在字符串缓冲区末尾中追加数据() 并且返回字符串缓冲区本身

 

 

 

这中方式便捷的缘故在于它能直接返回字符串缓冲区本身.

由于这样我们可以在这直接使用链式编程.

sb.append(“哈”).append(“哈”);同样可以输出同样的结果,不过一般不提倡使用链式编程.

StringBuffer的删除功能:

 

  public StringBuffer deleteCharAt(int index):移除指定位置处的字符..

  public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...

如图:

 

 

 StringBuffer的反转功能:

  public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身

 

StringBuffer的截取功能:

 public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串

public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串

 

 

StringBuffer的替换功能:

 public StringBuffer replace(int start,int end,String str)

 从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身

 

故而不需要再重新定义字符串或这字符串缓冲区

拆装箱

这是JDK5以后的新特性:自动拆装箱.

例如int----Interger(int类型的包装类类型)  

Interger---int:自动拆箱

 

还有char---Character:

有时候需要将A类型转换成B类型.

例如将String 转换成StringBuffer相互转换

有两种方法,

方式一:通过带参构造将,String的值直接赋给StringBuffer例如:StringBuffer sb = new StringBuffer(s);

方式二:通过无参构造,后面使用append方法给后面添加sb.也能完成StringStringBuffer的转换.

 

StringBuffer转换为String

方式一:通过String的构造方法来直接给StringBuffer进行类型转换

方式二:通过StringBuffertoString方法进行转换

 

字符串的应用

有一个数组:需要将数组 拼接成字符串类型:

方式String类型的方式:

 

 

 

 

方式2:StringBuffer进行实现

 

判断一个字符串是否是对称字符串(方法改进)

方式一比较简单:String类型数据转换为StringBuffer ,使用reverse方法进行转化,再将其经过toString()方法将其转换为String类型,然后和原来的String类型数据进行比较,如果相等则堆成:代码如下

String  s = “aba”;

StringBuffer sb = new StringBuffer(s);

Sb.reverse();

String s1 =sb.toString();

s1.equals(s);

若返回值是ture,则对称,反之则部队称.

链式编程 new StringBuffer(s).reverse.toString().equals(s)

方式二:可以将String类型转换为char类型数组,然后将数组中的第一值对比最后一个,第二个对比倒数第二个,依次对比.

拆装箱

 

 

基本类型对应都有一个保证类型,目的就为了将基本数据类型可以String类型之间进行互相转换

 byteByte

 shortShort

 intInteger()

 longLong

 floatFloat

 doubleDouble

 charcharacter()

 booleanBoolean

规律:一般保证类型是基本类型第一个字母大写就好了.

只有int--->Integer;

  char--->Character; 这两个需要特别记忆下.

 

 

Integer类是int类型的包装类类型

Integer提供了静态功能:

 public static String toBinaryString(int i)//该方法可以将数转换为二进制

 public static String toOctalString(int i)//转换为八进制

 public static String toHexString(int i)//转换为十六进制

 

 

 

 

 

 

Integer的构造方法:

 public Integer(int value)

 public Integer(String s)//当前的字符串必须为数字字符串.

若是Integer i = new Integer(abc);

这会导致错误,错误类型:java.lang.NumberFormatException

注意:代码:Integer i = 200;

虽然200int类型,但是为什么能直接转化呢?

经过反编译后发现,底层代码实际执行的是valueOF(int i);该类中本身有一层缓冲区:缓冲值的范围:-128~127

 

 

 

 

如何将int转换为String类型

   valueOf(int i) ;

 String转换为int类型

   static int parseInt(String s);

首先是Int转化为String类型的演示

方式一:

方式1: 字符串拼接

Int num = 19;

例如:String s = “” + num;

方式二:方式2:valueOf(int i) ;

int -->Integer--->String

 

例如:Integer i = new Integer(100);

      String s = i.toString();

 

方式3:静态toString(int i):    由于static String toString(int i )     

String s = Integer.toString(num);

 

String--->int

方式1:String-->integer--->int

   String s = "923";

   Integer i = new Integer(s);

   int i1 = i.intValue();

方式2:方式2:(常用)public static int parseInt(String s)

String s = "923";

  int a = Integer.parseInt(s);

  System.out.println(s);

 

 

注意:

JDK5 以后提供了自动拆装箱

 可以将Integer-->拆箱  int类型

 可以int类型--->装箱  Integer类型

 JDK5 还提供了哪些特性:

 泛型,可变参数,增强for循环(在集合中)等等..

  

  JDK8特性:

 Stream--> 表达式

 

 

Character:

 Character 类在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段。

以确定字符的类别(小写字母,数字,等等),

 构造方法:

 

构造方法:

 public Character(char value)

例如 Character ch = new Character(a);

 

 

Character类的判断功能:

public static boolean isDigit(char ch)确定指定字符是否为数字。

public static boolean isLowerCase(int ch): 确定是否是小写字母字符

public static boolean isUpperCase(int ch):确定是否大写字母字符

 

 

 两个转换功能:

  public static int toLowerCase(int codePoint)

  public static int toUpperCase(int codePoint)

 

 

 

排序算法:

1. 冒泡排序思想:

 两两比较,大的往后放,第一次完毕后,最大值在最大索引处!依次这样比较,得到一个排好序的数组.

   规律:1)两联比较,大的往后放,最大值在最大索引处

        2)第一次全部比较,确定数组最大值.

 

选择排序:

思想:0索引依次开始和后面的索引值进行比较,小的往前放,第一次放完后,最小值在最小索引处,然后这样比较,得到一个排列好的数组.

规律:

0索引开始,依次和后面的索引对应的元素进行比较,小的往前放.

 

折半查找:

前提:一定是数组原来的元素是有序的,

中心思想:将元素减半,方便开发者使用.

 分析:

 A:定义最小索引和最大索引

 B:计算中间索引

 C:中间索引对应的元素和需要查找的元素比较

 相等,直接返回中间索引

 不相等:

 大了,左边找

 max = mid -1 ;

 小了,右边找

 min = mid + 1 ;

 E:重新计算中间索引 ,回到B继续查找

 

使用二分查找时,可以先进行排序,再进行二分查找,可这样各个数的索引值会发生改变.

故这时候直接使用基本元素查找法更直接:

 

关键代码

//value为想要查找的数

For( int x = 0 ;  x <arr.length ; x++){
if( arr[x] = value){

Return x;

}

}

Return -1;

 

 




猜你喜欢

转载自blog.csdn.net/qq_35501660/article/details/80146555
今日推荐