特点:
- HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
- HashSet 允许有 null 值。
- HashSet 是无序的,即不会记录插入的顺序。
- HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
- HashSet 实现了 Set 接口。
方法:
- 添加元素 add() 方法
-
判断元素是否存在 contains() 方法
-
删除元素 remove() 方法
-
计算大小 size() 方法
// 引入 HashSet 类
import java.util.HashSet;
public class RunoobTest {
public static void main(String[] args) {
HashSet sites = new HashSet();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Runoob"); // 重复的元素不会被添加
System.out.println(sites);
//输出 [Google, Runoob, Zhihu, Taobao]
System.out.println(sites.contains("Taobao"));
//输出 true
sites.remove("Taobao"); // 删除元素,删除成功返回 true,否则为 false
System.out.println(sites);
//输出 [Google, Runoob, Zhihu]
System.out.println(sites.size());
//输出 3
}
}
二、Map
1、HashMap
特点:
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
- HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
- HashMap 是无序的,即不会记录插入的顺序。
- HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
方法:
- 添加元素 put() 方法
-
访问元素 get() 方法
-
删除元素 remove() 方法
-
计算大小 size() 方法
// 引入 HashMap 类
import java.util.HashMap;
public class RunoobTest {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap Sites = new HashMap();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites);
//输出 {1=Google, 2=Runoob, 3=Taobao, 4=Zhihu}
System.out.println(Sites.get(3));
//输出 Taobao
Sites.remove(4);
System.out.println(Sites);
//输出 {1=Google, 2=Runoob, 3=Taobao}
System.out.println(Sites.size());
//输出 3
}
}
三、List
1、ArrayList
特点:
- ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
- ArrayList 继承了 AbstractList ,并实现了 List 接口。
方法:
- 添加元素 add() 方法
-
访问元素 get() 方法
-
修改元素 set() 方法
-
删除元素 remove() 方法
-
计算大小 size() 方法
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList sites = new ArrayList();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites);
//输出 [Google, Runoob, Taobao, Weibo]
System.out.println(sites.get(1)); // 访问第二个元素
//输出 Runoob
sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
System.out.println(sites);
//输出 [Google, Runoob, Wiki, Weibo]
sites.remove(3); // 删除第四个元素
System.out.println(sites);
//输出 [Google, Runoob, Wiki]
System.out.println(sites.size());
//输出 3
}
}
2、LinkedList
特点:
- Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。
- 与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
方法:
- 在头部添加元素 addFirst() 方法
- 在尾部添加元素 addLast() 方法
- 移除头部元素 removeFirst() 方法
- 移除尾部元素 removeLast() 方法
- 获取头部元素 getFirst() 方法
- 获取尾部元素 getLast() 方法
// 引入 LinkedList 类
import java.util.LinkedList;
public class RunoobTest {
public static void main(String[] args) {
LinkedList sites = new LinkedList();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.addFirst("Wiki"); // 使用 addFirst() 在头部添加元素
sites.addLast("Weibo"); // 使用 addLast() 在尾部添加元素
System.out.println(sites);
//输出 [Wiki, Google, Runoob, Taobao, Weibo]
sites.removeFirst(); // 使用 removeFirst() 移除头部元素
sites.removeLast(); // 使用 removeLast() 移除尾部元素
System.out.println(sites);
//输出 [Google, Runoob, Taobao]
System.out.println(sites.getFirst()); // 使用 getFirst() 获取头部元素
//输出 Google
System.out.println(sites.getLast()); // 使用 getLast() 获取尾部元素
//输出 Taobao
}
}
❷常用类 一、Object
Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。
1、方法- protected Object clone() 创建并返回一个对象的拷贝
- boolean equals(Object obj) 比较两个对象是否相等
- protected void finalize() 当 GC (垃圾回收器)确定不存在对该对象的有更多引用时,由对象的垃圾回收器调用此方法。
- Class> getClass() 获取对象的运行时对象的类
- int hashCode() 获取对象的 hash 值
- void notify() 唤醒在该对象上等待的某个线程
- void notifyAll() 唤醒在该对象上等待的所有线程
- String toString() 返回对象的字符串表示形式
- void wait() 让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
- void wait(long timeout) 让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数设置的timeout超时时间。
- void wait(long timeout, int nanos) 与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。。
在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
1、创建字符串String s1 = "Taobao"; // String 直接创建
String s2 = new String("Taobao"); // String 对象创建
2、方法
- int compareTo(String anotherString) 按字典顺序比较两个字符串。
- String concat(String str) 将指定字符串连接到此字符串的结尾。
- static String copyValueOf(char[] data) 返回指定数组中表示该字符序列的 String。
- boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。
- byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
- int length() 返回此字符串的长度。
- char[] toCharArray() 将此字符串转换为一个新的字符数组。
- String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
- String toString() 返回此对象本身(它已经是一个字符串!)。
- String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
- isEmpty() 判断字符串是否为空。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
public class RunoobTest{
public static void main(String args[]){
StringBuilder sb = new StringBuilder(10);
sb.append("Taobao..");
System.out.println(sb);
//输出 Taobao..
sb.append("!");
System.out.println(sb);
//输出 Taobao..!
sb.insert(8, "Java");
System.out.println(sb);
//输出 Taobao..Java!
sb.delete(5,8);
System.out.println(sb);
//输出 TaobaJava!
}
}
四、StringBuffer
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
1、方法- public StringBuffer append(String s) 将指定的字符串追加到此字符序列。
- public StringBuffer reverse() 将此字符序列用其反转形式取代。
- public delete(int start, int end) 移除此序列的子字符串中的字符。
- public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。
- insert(int offset, String str) 将 str 参数的字符串插入此序列中。
- replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。
public class Test{
public static void main(String args[]){
StringBuffer sBuffer = new StringBuffer("百度官网:");
sBuffer.append("www");
sBuffer.append(".baidu");
sBuffer.append(".com");
System.out.println(sBuffer);
//输出 百度官网:www.baidu.com
}
}
五、System
System类是一些与系统相关的属性和方法的集合,而且在System类中所有的属性都是静态的,要想引用这些属性和方法,直接使用System类调用即可。
1、方法- public static void exit(int status) 系统退出 ,如果status为0就表示退出。
- public static void gc() 运行垃圾收集机制,调用的是Runtime类中的gc方法。
- public static long currentTimeMillis() 返回以毫秒为单位的当前时间。
- public static void arraycopy(Object src,int srcPos, Object dest,int desPos,int length) 数组拷贝操作
- public static Properties getProperties() 取得当前系统的全部属性。
- public static String getProperty(String key) 根据键值取得属性的具体内容。
- boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
- boolean before(Date date) 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
- int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
- boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
- long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
- String toString( ) 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
使用 Date 对象的 toString() 方法来打印当前日期和时间
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
}
}



