一、集合
(一).set集合
- 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集合
List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。
在Collection中,List集合是有序的,Developer可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素。
在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协议。
- 它具有如下特点:
4.1 容量不固定,随着容量的增加而动态扩容(阈值基本不会达到)
4.2 有序集合(插入的顺序==输出的顺序)
4.3 插入的元素可以为null
4.4 增删改查效率更高(相对于LinkedList来说)
4.5 线程不安全
二、常用类
(一)Object
- 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 Class>getClass():获取对象的运行时对象的类
5 int hashCode():获取对象的 hash 值
6 String toString():返回对象的字符串表示形式
(二) String
字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
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
StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的
StringBuilder常用方法
2.1 public StringBuilder append():添加数据,返回对象本身
2.2 public StringBuilder reverse():返回相反的字符序列
2.3 public int length():返回长度
2.4 public String toString():把StringBuilder转换为String类型
(四)StringBuffeer
StringBuffer 类可以比 String 类更高效地处理字符串。
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
System 类位于 java.lang 包,代表当前 Java程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是无法实例化该类。System 类提供了一些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法。
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
java.util.Data类,表示特定的瞬间。精确到毫秒。
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);
}
}