2022-06-29

一、集合

(一).set集合

  1. Set继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两大实现类。

在判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现。

HashSet是哈希表结构,主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置;

TreeSet是红黑树结构,每一个元素都是树中的一个节点,插入的元素都会进行排序;

2.set常用方法
与List接口一样,set接口也提供了集合操作的基本方法。但与List不同的是,Set还提供了equals(object o)和hashCode(),供其子类重写,以实现对集合中插入重复元素的处理;

2.1 HashSet

HashSet实现Set接口,底层由HashMap(后面讲解)来实现,为哈希表结构,新增元素相当于HashMap的key,value默认为一个固定的Object。在我看来,HashSet相当于一个阉割版的HashMap;

当有元素插入的时候,会计算元素的hashCode值,将元素插入到哈希表对应的位置中来;

它继承于AbstractSet,实现了Set, Cloneable, Serializable接口。

(1)HashSet继承AbstractSet类,获得了Set接口大部分的实现,减少了实现此接口所需的工作,实际上是又继承了AbstractCollection类;

(2)HashSet实现了Set接口,获取Set接口的方法,可以自定义具体实现,也可以继承AbstractSet类中的实现;

(3)HashSet实现Cloneable,得到了clone()方法,可以实现克隆功能;

(4)HashSet实现Serializable,表示可以被序列化,通过序列化去传输,典型的应用就是hessian协议。

具有如下特点:

不允许出现重复因素;

允许插入Null值;

元素无序(添加顺序和遍历顺序不一致);

线程不安全,若2个线程同时操作HashSet,必须通过代码实现同步;

(二)Map集合

1.Map集合的特点:

1.1 将键映射到值的对象、

1.2 key和value可以是任意的引用类型的数据

1.3 一个映射不能包含重复的键(map集合的key值不能重复)

1.4 每个键最多可以映射到一个值(每个键值对只有一个key值,一个value值)

1.5 同样的值可以对应多个不同的键(不同的键值对可以拥有相同的value值)

2.Map集合的功能:

2.1 添加功能: put(K key,V value)将指定的值与该映射中的指定键相关联

2.2 删除功能:

remove(Object key)如果存在,从该map集合中删除一个键的映射

void clear()从该map集合中删除所有的映射

2.3 长度功能:int size()返回此地图中键值映射的数量

(三)List集合

  1. List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。

  2. 在Collection中,List集合是有序的,Developer可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素。

  3. 在List集合中,我们常用到ArrayList和LinkedList这两个类。其中,ArrayList底层通过数组实现,随着元素的增加而动态扩容。而LinkedList底层通过链表来实现,随着元素的增加不断向链表的后端增加节点。ArrayList是Java集合框架中使用最多的一个类,是一个数组队列,线程不安全集合。它继承于AbstractList,实现List,RandomAccess, Cloneable, Serializable接口。

(1)ArrayList实现List,得到了List集合框架基础功能;

(2)ArrayList实现RandomAccess,获得了快速随机访问存储元素的功能,RandomAccess是一个标记接口,没有任何方法;

(3)ArrayList实现Cloneable,得到了clone()方法,可以实现克隆功能;

(4)ArrayList实现Serializable,表示可以被序列化,通过序列化去传输,典型的应用就是hessian协议。

  1. 它具有如下特点:

4.1 容量不固定,随着容量的增加而动态扩容(阈值基本不会达到)

4.2 有序集合(插入的顺序==输出的顺序)

4.3 插入的元素可以为null

4.4 增删改查效率更高(相对于LinkedList来说)

4.5 线程不安全

二、常用类

(一)Object

  1. Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法,Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。

2.Object常用方法

1 protected Object clone():创建并返回一个对象的拷贝

2 boolean equals(Object obj):比较两个对象是否相等

3 protected void finalize():当 GC (垃圾回收器)确定不存在对该对象的有更多引用时,由对象的垃圾回收器调用此方法。

4 ClassgetClass():获取对象的运行时对象的类

5 int hashCode():获取对象的 hash 值

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

(二) String

  1. 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

  2. String常用方法

2.1 char charAt(int index):返回指定索引处的 char 值。

2.2 int compareTo(Object o):把这个字符串和另一个对象比较。

2.3 String concat(String str):将指定字符串连接到此字符串的结尾。

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

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

(三) StringBuilder

  1. StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的

  2. StringBuilder常用方法

2.1 public StringBuilder append():添加数据,返回对象本身

2.2 public StringBuilder reverse():返回相反的字符序列

2.3 public int length():返回长度

2.4 public String toString():把StringBuilder转换为String类型

(四)StringBuffeer

  1. StringBuffer 类可以比 String 类更高效地处理字符串。

  2. StringBuffer常用方法

2.1 public StringBuffer append(String s):将指定的字符串追加到此字符序列。

2.2 public StringBuffer reverse():将此字符序列用其反转形式取代。

2.3 public delete(int start, int end):移除此序列的子字符串中的字符。

2.4 public insert(int offset, int i):将 int 参数的字符串表示形式插入此序列中。

2.5 insert(int offset, String str):将 str 参数的字符串插入此序列中。

2.6 replace(int start, int end, String str):使用给定 String 中的字符替换此序列的子字符串中的字符。

(五) System

  1. System 类位于 java.lang 包,代表当前 Java程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是无法实例化该类。System 类提供了一些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法。

  2. System常用方法
    2.1 currentTimeMillis() 方法:该方法的作用是返回当前的计算机时间,时间的格式为当前计算机时间与 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒所差的毫秒数。一般用它来测试程序的执行时间。

2.2 getProperty() 方法:该方法的作用是获得系统中属性名为 key 的属性对应的值。

2.3 arraycopy() 方法:该方法的作用是数组复制,即从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。代码示例:

public class System_arrayCopy {

    public static void main(String[] args) {

        char[] srcArray = {'A','B','C','D'};

        char[] destArray = {'E','F','G','H'};

        System.arraycopy(srcArray,1,destArray,1,2);

        System.out.println("源数组:");

        for(int i = 0;i < srcArray.length;i++) {

            System.out.println(srcArray[i]);

        }

        System.out.println("目标数组:");

        for(int j = 0;j < destArray.length;j++) {

            System.out.println(destArray[j]);

        }

    }

}

源数组:

A

B

C

D

目标数组:

E

B

C

H

(六)Data

  1. java.util.Data类,表示特定的瞬间。精确到毫秒。

  2. Date常用方法

2.1 public String format(Data data):将Data对象格式化为字符串。

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

/*

把Date对象转换成String

*/

public class Demo03DateFormatMethod {

    public static void main(String[] args) {

        Date date = new Date();

        // 创建日期格式化对象,在获取格式化对象时可以指定风格

        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");

        String str = df.format(date);

        System.out.println(str); // 2022年6月29日

    }

}   

2.2 public Data parse(String source):将字符串解析为Data对象。

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

/*

把String转换成Date对象

*/

public class Demo04DateFormatMethod {

    public static void main(String[] args) throws ParseException {

        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");

        String str = "2022年6月29日";

        Date date = df.parse(str);

        System.out.println(date); 

    }

}

你可能感兴趣的:(2022-06-29)