HashSet
- jdk1.7之前,使用陣列加鏈表的方式實作
- jdk1.8之后,在鏈表長度大于8并且陣列長度超過32的情況下,會轉成紅黑樹結構
- HashSet的本質是一個HashMap,它所有的value都是一致的,傳入的引數作為key,因此HashSet中不允許重復資料
- 存盤的時候,鍵值對位于的陣列位置,之和key的HashCode值有關,無法保證先插入的key的HashCode值一定比較小,因此無法保證存讀有序
Set<String> set = new HashSet<>();
set.add("Robot01");
set.add("Robot02");
set.add("Robot03");
// 1. 增強for回圈遍歷
for (String s : set) {
System.out.println(s + "\t");
}
System.out.println();
// 2. 迭代器遍歷
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next() + "\t");
}
二叉樹
二叉樹的節點類
@Data
@AllArgsConstructor
@NoArgsConstructor
// 泛型繼承,你提供的泛型型別一定是Comparable類的子類
public class Node<V extends Comparable> {
private V value;
private Node<V> leftNode;
private Node<V> rightNode;
public void addNode(V value){
if (null == this.value){
// 當前節點沒有值
this.value = https://www.cnblogs.com/te9uila/archive/2023/05/22/value;
}else{
// 當前節點有值
if(this.value.compareTo(value)>=0){
// 當前值小于節點值
// 判斷當前節點的左節點是否為空
if(null == leftNode){
// 左節點為空,新建新節點
leftNode = new Node<>();
}
// 遞回呼叫
leftNode.addNode(value);
} else {
// 當前值大于節點值
// 判斷當前節點的右節點是否為空
if (null == rightNode){
// 右節點為空,新建新節點
rightNode = new Node<>();
}
rightNode.addNode(value);
}
}
}
}
// 測驗類
public class Application {
public static void main(String[] args) {
int[] randoms = {17,34,64,72,37,18,98,37,53,63};
// 創建根節點
Node root = new Node<>();
for (int random : randoms) {
root.addNode(random);
}
System.out.println(root.getRightNode().getValue());
}
}
三種遍歷方法(前序遍歷,中序遍歷,后序遍歷)
? 以中序遍歷為例
// 中序遍歷
public List<V> inOrder(Node<V> root){
List<V> nodeList = new ArrayList<>();
if(null == root.value){
return nodeList;
}else{
if (null != root.leftNode){
nodeList.addAll(inOrder(root.leftNode));
}
nodeList.add(root.value);
if (null != root.rightNode){
nodeList.addAll(inOrder(root.rightNode));
}
return nodeList;
}
}
TreeMap和TreeSet
- TreeMap中,所有的key是以紅黑樹進行存盤的
- 在使用TreeMap的時候,如果你key的型別實作了比較器介面,就可以自動排序
- TreeSet和TreeMap方法幾乎一致,只不過不再提供value的獲取,所有方法獲取的都是key
- 兩者相同,要么泛型對應的資料型別實作了Comparable介面,要么手動提供一個Comparator比較器物件,否則兩者都不可以被實體化(類似于強制排序)
public static void main(String[] args) {
TreeMap<String, String> treeMap = new TreeMap<>();
// 根據key的compareTo比較器確定的排序方法
for (int i = 0; i < 5; i++) {
treeMap.put("robot0" + i,"i");
}
// 回傳第一個key(hashcode最小)
System.out.println(treeMap.firstKey());
// 回傳第一個鍵值對(hashcode最小)
System.out.println(treeMap.firstEntry());
// 回傳最后一個鍵值對(hashcode最大)
System.out.println(treeMap.lastEntry());
// 回傳最后一個鍵值對(hashcode最大)
System.out.println(treeMap.lastKey());
// 如果匹配的key存在,默認取匹配key
System.out.println(treeMap.floorKey("robot01"));
// 如果匹配key存在,則取上一個key
System.out.println(treeMap.lowerKey("robot01"));
// 還有很多基于key的排序衍生出來的方法,,,,
}
日期類(Calendar類)
// Calendar 日歷類,對日期時間做修改和調整(單例模式)
// add 基于時間單位做日期的前后調整
// set 基于時間單位做日期值的設定
Calendar c = Calendar.getInstance();
// 創建日期物件時,如果沒有指定時間,默認使用當前時間
Date now = c.getTime();
System.out.println(c.getTime());
// 獲得下個月的今天
// 引數值如果時正數,表示未來,如果為負數,表示過去
c.add(Calendar.MONTH,1);
System.out.println(c.getTime());
// 重置日歷時間
c.setTime(now);
// 獲取上個月的第三天
c.add(Calendar.MONTH,-1);
// 如果set的是月份那么使用(0~11)來表示1~12月
c.set(Calendar.DATE,3);
System.out.println(c.getTime());
檔案類(File類)
? Java中借助檔案類的物件,來操作和訪問磁盤中的真實檔案,檔案物件只是真實檔案的映射,并不代表檔案本身,檔案是否存在并不影響物件的創建,
檔案物件的三種創建方式
- 基于檔案再磁盤中的絕對路徑來進行創建
File f1 = new File("檔案路徑")
- 基于當前專案所在位置路徑進行創建
File f1 = new File("檔案名")
- 基于另一個目錄物件作為父目錄,創建檔案物件
File f1 = new File(f1,"檔案名")
回傳檔案絕對路徑
System.out.println(f1.getAbsolutePath());
檔案類常用方法
1. 判斷檔案是否存在
System.out.println(f1.exists());
2.判斷是否是檔案夾
System.out.println(f1.isDirectory());
3.判斷是否是檔案
System.out.println(f1.isFile());
4.獲取檔案長度
System.out.println(f2.length());
5.檔案最后修改時間
System.out.println(f2.lastModified());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
// 日期轉字串
System.out.println(dateFormat.format(f2.lastModified()));
// 字串轉日期,必須保證字串日期格式與定義的format格式一致,且必須進行例外處理
String str = "2023-05-20 13:59:47 871";
try {
System.out.println(dateFormat.parse("2023-05-20 13:59:47 871"));
} catch (ParseException e) {
e.printStackTrace();
}System.out.println(f2.lastModified());
6.設定檔案最后修改時間
String str = "2023-05-20 13:59:47 871";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
try {
Date d = dateFormat.parse("2023-05-20 13:59:47 871");
file02.setLastModified(d.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
7.設定檔案只讀
file02.setReadOnly();
8. 重命名檔案
// 檔案重命名,需要提供新的檔案物件
File file03 = new File(file01,"HAHAHAHAHA.txt");
file02.renameTo(file03);
9. 以字串陣列的形式回傳當前目錄下所有檔案的檔案名稱
// 以字串陣列的形式回傳當前目錄下所有檔案的檔案名稱
String[] fileList = file01.list();
System.out.println(Arrays.asList(fileList));
10. 以檔案物件陣列的方式,回傳當前目錄下所有檔案所對應的檔案物件
// 以檔案物件陣列的方式,回傳當前目錄下所有檔案所對應的檔案物件
File[] files = file01.listFiles();
for (File file : files) {
System.out.println(file);
}
11.獲取當前檔案物件父目錄的路徑
// 獲取當前檔案物件父目錄的路徑
System.out.println(file02.getParent());
// 獲取當前檔案物件父目錄所對應的檔案物件
File parentFile = file02.getParentFile();
System.out.println(parentFile.getAbsoluteFile());
12.創建檔案物件路徑所對應的目錄
// 創建檔案物件路徑所對應的目錄
File file = new File("絕對路徑");
file.mkdirs();
13.創建檔案物件的路徑所對應的檔案
// 創建檔案物件的路徑所對應的檔案
File file = new File("絕對路徑");
// 再創建檔案之前,應該先判斷檔案的父目錄是否存在
// 如果存在,則直接創建,如果不存在則應該先創建父目錄
if (!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
try {
file.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
14.洗掉檔案
// 洗掉檔案
file02.delete();
// 退出的時候再洗掉(用于臨時檔案)
file02.deleteOnExit();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/553061.html
標籤:其他
上一篇:java 外殼加密,完美解決
下一篇:返回列表