常用类与集合

1,object类

java.lang.Object类:所有的类父类(包括自定义的类)

重点功能:

public final Class getClass():获取正在运行的类; (返回字节码文件对象) (跟后面反射有关系)

面试题:

在Java中获取一个类的字节码文件对象的方式有几种?

有三种:

1)public final Class getClass():获取正在运行的类; (返回字节码文件对象)

2)在Java中任意类型的class属性 举例: Class c = 类名.class

3)Class类提供的一个静态方法

public static Class forName(String classPathName) :参数为当前类的全限定名称

object类中的toString()

public String toString():返回对象的字符串表示形式。

结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法(否则,打印出来的是地址值!)

public int hashCode():返回对象的哈希码值,不同的对象,它的哈希码值不同

(理解为 "地址值",它不是实际意义的地址值----通过哈希算法算出来的)


//任何类都继承Object类---toString方法源码
   public String toString() {
          return getClass().getName() + "@" + Integer.toHexString(hashCode());
 
        //return this.getClass().getName() +"@" +Integer.Integer.toHexString(this.hashCode())

面试题:

==和equals的区别?

==连接的是两个基本数据类型:比较的数据值是否相同

而如果引用类型,比较的是引用类型的地址值是否相等!

equals:Object的equaels方法默认比较的是两个对象的地址值相同,

如果你要比较成员信息的内容是否相同,必须重写Object的equals方法以及hashCode,重写之后比较的是内容是否相同(成员信息)

equals重写之后,是比较里面的每一个成员信息是否一样,如果都一样;

还有比较两个成员对应的hashCode是否一样,如果一样,是同一个人!

object的克隆方法

创建并返回此对象的"副本"----前提是自定义的类型必须实现Cloneable接口,否则无法克隆!

protected Object clone() throws CloneNotSupportedException

object的垃圾回收方法

protected void finalize()throws Throwable--跟gc垃圾回收器有关系

当jvm开启垃圾回收器的时候,就会回收堆内存中没有更多引用的对象(new 出来的东西)

当前垃圾回收器开始运行,会调用Object类的finalize()方法,来回收对象,子类重写了,会调用子类的finalize方法

java.util.Scanner:文本扫描器(键盘录入数据的)

构造方法:

public Scanner(InputStream source):

创建一个文本扫描器对象,里面参数是字节输入流,读取键盘录入的一些数据

成员方法:

获取功能:除过不能录入char类型之外.都可以录入!

int nextInt():录入int类型

String next():录入字符串

String nextLine():录入一行字符串

....

判断功能

boolean hasNextXXX()方法:判断下一个录入的是为XXX类型

细节:

如果先录入int,在录入String,在录入String(使用String nextLine())---String的值会被漏掉;

解决方案:

1)使用String next():录入单个字符串(推荐)

2)在使用nextLine()之前,重新创建一个新的Scanner对象;

String类

代表字符串,是一个常量,创建之后,其值不能更改!

举例:

String s = "abc" ; 格式 开发中定义字符串就这个格式!

字符串的底层就是一个字符数组组成!char[]--->String

构造方法:

public String():创建字符串对象

public String(String original):将指定的字符串传进去,构造一个字符串对象

public String(char[] value):将字符串数组---构造成String

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

public String(byte[] bytes)将字节数组---构造成String

public String(byte[] bytes, int offset,int length):将一部分字节数组---构造成String

如果存在类型转换问题:

已知char[]--->String public String(char[] value)

已知byte[]--->String public String(byte[] bytes)

如果仅仅表示定义一个String对象---推荐的格式

String 变量名 = "字符串常量" ;

面试题:

s1和s2有什么区别?

String s1 = "hello" ;

String s2 = new String("hello") ;

第一个格式:

创建一个对象,直接在常量池中创建;

第二个格式:

需要在堆内存开辟空间,而且指向常量池地址:内存创建了两个对象!

两个都是创建字符串实例,但是推荐第一种,从内存角度考虑,消耗内存资源不严重!

String类中常用的获取功能:

1)public char charAt(int index) 获取指定索引值对应的字符
       2)public int length()  :字符串特有功能:获取字符串长度
 
       3)public String concat(String str):拼接功能 将指定的字符串拼接到该字符串末尾,获取新的字符串
 
       4)public int indexOf(String str)返回指定字符串第一次出现索引值
       public int lastIndexOf(String str):返回指定子字符串最后一次出现的索引值
 
 
       5)public String[] split(String regex):字符串拆分功能
 
       6)截取功能
               public String substring(int beginIndex,int endIndex)
              从指定位置开始,截取到endIndex-1处结束,包前不包后
               public String substring(int beginIndex)
               从指定位置开始默认截取到末尾!

String类的常用的转换功能

public byte[] getBytes(): //将字符串转换成字节数组 (编码过程:将能看懂的东西--->变成看不懂的!)
                           //(使用平台默认字符集)
 
       public char[] toCharArray()  ://将字符串转换成字符数组  (使用居多)
 
       public static String valueOf(常见的基本类型int/long/double/float/boolean/Object):
           String的万能方法:将上面的常用类型--转换成String
 
       public String toUpperCase()://将指定字符串转换成大写
       public String toLowerCase()://将指定字符串转换成小写

StringBuffer

字符串缓冲区,线程安全的,支持可变的字符序列!

什么叫线程安全----->后面讲的多线程

线程安全----> 意味"同步"---->执行效率低!---"银行类的网站!"

线程不安全---->意味"不同步"---->执行效率高!----"论坛的网站!"---不安全--->"锁机制"来解决线程安全问题(多线程)

面试题:

StringBuffer和StringBuilder的区别?

这两个类都是字符串缓冲区,都支持可变的字符序列,(都有相同的功能)

前者:使用在多线程环境里面,能够保证线程安全----意味着同步----->执行效率低

后者:是StringBuffer的简易替换,用于在单线程环境中,线程不安全---不同步---执行效率高!

单线程使用StringBuilder:效率高(速度快)

构造方法

public StringBuffer():无参构造方法,里面空的字符序列,初始容量16个字符(默认容量足够大) -

public StringBuffer(String str):将字符串构造为StringBuffer类型,容量是大小:当前的里面的字符串长度+16

前两个构造方法使用居多!

public StringBuffer(int capacity):创建一个字符串缓冲区,指定容量大小

获取字符串缓冲区的长度 ---int length()

获取字符串缓冲区的容量---int capacity()

StringBuffer的添加/删除的功能

添加:
        public StringBuffer append(任意java类型) //可以将任意类型的元素添加(在末尾追加)到字符串缓冲区中,返回值是字符串缓冲区本身
 
      public StringBuffer insert(int offset,任意java类型)://在指定位置处的序列前面插入新的序列
  删除:
           public StringBuffer deleteCharAt(int index)://在指定位置处删除指定的字符,返回字符串缓冲区本身
           public StringBuffer delete(int start,int end)://从指定位置start处开始到end-1处的字符序列删除,
                           返回值字符串缓冲区本身
 
    开发中使用居多:追加功能以及删除 deletCharAt(int  index)使用居多

StringBuffer其他功能:

替换功能

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

使用指定的字符串str从指定位置开始到end-1处进行替换,返回该字符串缓冲区本身

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

public String substring(int start,int end):从指定位置开始截取到指定位置end-1处,返回被截取后的字符串

面试题:

String和StringBuffer的区别?

String特点:字符串是一个常量,一旦被创建,其值不能被更改

String作为形式参数,形参的改变不会影响实际参数;

而除过String这个引用类型之外,形式参数的改变直接影响实际参数!

StringBuffer特点:

字符串缓冲区支持可变的字符串,线程安全,执行效率低!

Integer类:

jdk提供了一个类Integer类,提供了一些功能:十进制转换成对应的进制的方法(静态方法)

*

   拆箱:
                   这些包装类类型--->降为 基本类型
            装箱:
                   就是基本类型--->提升  对应的引用类型
 
               基本类型                       引用类型的默认值null
                   byte                        Byte
                   short                       Short
                   int                         Integer(特殊)
                   long                        Long
 
                   float                       Float
                   double                      Double
 
                   char                        Character(特殊)
 
                   boolean                     Boolean
 
       这些四类八种中的基本数据类型可以String进行相互转换的---->中间桥梁 ---->对应的基本类型的包装类类型!
       String-->Integer--->int
           "100"  --->100
 
          Integer和Character涉及相关功能

* 四类八种的基本数据类型都会自动提升 对应的引用类型 jdk5以后新特性:自动拆装箱

Integer类表示包含int类型的值

Integer类的构造方法:

public Integer(int value):创建一个Integer实例,里面包含的int类型的值

public Integer(String s) throws NumberFormatException: 将数字字符串转换成Integer的实例

可能会出现数字格式化异常(字符串如果不是数字字符串,就会出现这个异常)

Date类(重点)

java.util.Date:表单特定的日期时间,还允许格式化和解析日期字符串

构造方法:

public Date():创建当前日期对象:获取当前系统日期时间

public Date(long date):里面传入long类型的时间毫秒值,获取的表示从标准基准时间(称为“时代”)即1970年1月1日00:00:00 GMT起的指定毫秒数

成员方法:

public long getTime():将Date对象转换成long类型时间毫秒值

public void setTime(long time):设置日期时间,参数时间毫秒值

 如何将date和string日期文本进行相互交换


他们之间要进行转换需要使用类DateFormat
  DateFormat是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间
  它具体的子类:SimpleDateFormat是一个具体的类,允许格式化(日期文本),解析(文本日期)
 
 构造方法:
       public SimpleDateFormat(String pattern):参数是日期模式         "yyyy-MM-dd"
       pattern的组成:
               y:表示年份中某个值----->yyyy 表示年 "1996/2023/..."
               M:表示年中的月份------>MM     表示月:七月-->"07" 十月 -->"10"
               d:表示月中的日期值----->dd   表示 "01","11","31"..
  成员方法
       将Date---->String:格式化  public final String format(Date date)
      将String日期---->Date:解析
     public Date parse(String source)throws ParseException

集合

List集合

List集合特点:

元素有序(存储和取出一致),而且元素可以重复!

List集合是Collection集合的子接口,它集合遍历方式:

1)Collection的Object[] toArray()

2)Collection的Iterator iterator() ;

3)使用size()+ 存储的数据类型 get(int index)通过角标获取元素内容 :普通for循环格式

4)ListIterator<E> listIterator()List集合的专有遍历方式 :列表迭代器

5)增强for循环

List集合常用三个子实现类特点:

实际需求:单线程中,使用List完成一些事情,没有明确规定具体使用哪个实现类;默认使用ArrayList集合!

默认:ArrayList

底层数据结构是数组-->查询快,增删慢! (数组,通过整数索引查询)

元素查找: 顺序查找,二分搜索(折半查找),哈希查找

43,50,66,70,---->哈希查询,哈希表的长度10

43 % 10 = 3

线程角度:

线程不安全的类,是一个不同步,执行效率高!

底层扩容机制1.5倍

Vector

底层数据结构是数组-->查询快,增删慢!

线程角度:

线程安全的类,是同步的,执行效率低! 多线程环境下使用居多,单线程使用ArrayList代替Vector

LinkedList

底层数据是链表, 查询慢,增删快

线程角度:

线程不安全的类,不同步的,执行效率高!

迭代器

interface Iterator<E>{

boolean hasNext() ;判断是否有下一个可以迭代的元素

E next() ;获取下一个元素

}

interface Iterable<T>{

Iterator<E> iterator();

}

interface Collection<E> extends Iterable {

Iterator<E> iterator();

}

interface List<E> extends Collection<E>{

Iterator<E> iterator();

}

//具体的子实现类

public class ArrayList<E> implements List<E>{

public Iterator<E> iterator() {

return new Itr();

}

//私有的成员内部类Itr

private class Itr implements Iterator<E> {

boolean hasNext(){

}

Object next(){

...

}

}

}

原理:就是ArrayList集合的内部类实现Itr间接实现了两个功能!

增强for

Jdk5新特性:<泛型>,增强for,可变参数,静态导入(导入到方法级别:方法必须静态)...

增强for:是在集合/数组中存储的引用类型中使用居多,代替集合迭代器的,简化书写代码

格式:

for(集合中存储的数据类型 变量名 : 集合对象){

使用这个变量名即可;

}

注意:

要使用增强for遍历集合,集合对象不能null;

防止空指针异常,在使用增强for之前,对集合进行非空判断!

set接口

Set接口特点:

无序(存储和取出不一致),不能保证迭代次序,但是可以唯一!

HashSet<E> : 存储和取出,保证元素唯一!

---底层是HashMap实例(哈希表)

TreeSet<E> : 存储和取出,同时需要进行排序的取出!

---底层是依赖TreeMap实例(红黑树结构)

TreeSet<E>有两种排序方式

* 自然排序:

* public TreeSet():使用自然排序,当前里面存储的类型必须实现Comparable

* 比较器排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值