实现MyHashMap类,修复LeetCode相关题目,调整TestInteger类代码结构。
This commit is contained in:
parent
6bddb836c9
commit
d5e3175b11
67
src/main/java/cn/whaifree/leetCode/Dynamic/LeetCode115.java
Normal file
67
src/main/java/cn/whaifree/leetCode/Dynamic/LeetCode115.java
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package cn.whaifree.leetCode.Dynamic;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/4/26 11:44
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode115 {
|
||||||
|
@Test
|
||||||
|
public void test()
|
||||||
|
{
|
||||||
|
Solution solution = new Solution();
|
||||||
|
System.out.println(solution.numDistinct("rabbbit", "rabbit"));
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public int numDistinct(String s, String t) {
|
||||||
|
/**
|
||||||
|
* dp[i][j] 以i-1为 结尾的 s子序列 中出现以j-1为 结尾的 t的个数为dp[i][j]
|
||||||
|
*
|
||||||
|
* '' b a g
|
||||||
|
* '' 1 0 0 0
|
||||||
|
* b 1 1 0 0
|
||||||
|
* a 1 1 1 0
|
||||||
|
* e 1 1 1 0
|
||||||
|
* g 1 1 1 1
|
||||||
|
* g 1 1 1 2
|
||||||
|
*
|
||||||
|
* if s[i]==t[j]
|
||||||
|
* 1. 用s[i - 1]来匹配 dp[i - 1][j - 1] bagg和bag t匹配到s的第二个g时,使用第一个g
|
||||||
|
* 2. 不用第s[i - 1]来匹配 dp[i - 1][j] bagg和bag t匹配到s的第二个g时,不使用第一个g
|
||||||
|
* dp[i][j] = dp[i-1][j-1]+dp[i - 1][j];
|
||||||
|
* else
|
||||||
|
* 不用s[i - 1]来匹配,模拟s中删除了这个元素
|
||||||
|
* dp[i][j] = dp[i - 1][j];
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
char[] sChar = s.toCharArray();
|
||||||
|
char[] tChar = t.toCharArray();
|
||||||
|
int[][] dp = new int[sChar.length + 1][tChar.length + 1];
|
||||||
|
for (int i = 0; i < sChar.length; i++) {
|
||||||
|
dp[i][0] = 1;
|
||||||
|
}
|
||||||
|
for (int i = 1; i <= sChar.length; i++) {
|
||||||
|
for (int j = 1; j <= tChar.length; j++) {
|
||||||
|
if (sChar[i - 1] == tChar[j - 1]) {
|
||||||
|
// 如果相同
|
||||||
|
// 使用i-1进行匹配 dp[i - 1][j - 1] bagg和bag t匹配到s的第二个g时,使用第一个g
|
||||||
|
// 不用第s[i - 1]来匹配 dp[i - 1][j] bagg和bag t匹配到s的第二个g时,不使用第一个g
|
||||||
|
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
|
||||||
|
} else {
|
||||||
|
// 不用s[i - 1]来匹配
|
||||||
|
dp[i][j] = dp[i - 1][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dp[sChar.length][tChar.length];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
57
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode33.java
Normal file
57
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode33.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package cn.whaifree.redo.redo_24_4_27;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/4/27 11:37
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode33 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
int[] nums = new int[]{4,5,6,7,0,1,2};
|
||||||
|
int target = 0;
|
||||||
|
int i = new Solution().search(nums, target);
|
||||||
|
System.out.println(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public int search(int[] nums, int target) {
|
||||||
|
// 二分查找
|
||||||
|
int left = 0;
|
||||||
|
int right = nums.length - 1;
|
||||||
|
int mid = 0;
|
||||||
|
while (left <= right) {
|
||||||
|
mid = (left + right) / 2;
|
||||||
|
if (nums[mid] == target) {
|
||||||
|
return mid;
|
||||||
|
}
|
||||||
|
|
||||||
|
// nums = nums1 + nums2
|
||||||
|
// 4,5,6,7,0,1,2
|
||||||
|
if (nums[mid] > nums[right]) { // nums1和nums2的交接处在mid右边
|
||||||
|
// nums1
|
||||||
|
if (nums[left] <= target && target < nums[mid]) {
|
||||||
|
right = mid - 1;
|
||||||
|
} else {
|
||||||
|
left = mid + 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// nums2
|
||||||
|
if (nums[mid] < target && target <= nums[right]) { // nums1和nums2的交接处在mid左边
|
||||||
|
left = mid + 1;
|
||||||
|
} else {
|
||||||
|
right = mid - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
44
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode69.java
Normal file
44
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode69.java
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package cn.whaifree.redo.redo_24_4_27;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/4/27 13:20
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode69 {
|
||||||
|
@Test
|
||||||
|
public void test()
|
||||||
|
{
|
||||||
|
Solution solution = new Solution();
|
||||||
|
|
||||||
|
new CopyOnWriteArrayList<>().add(1);
|
||||||
|
solution.mySqrt(9);
|
||||||
|
for (int i = 0; i < 20; i++) {
|
||||||
|
System.out.println("i:" + i + " " + solution.mySqrt(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public int mySqrt(int x) {
|
||||||
|
int left = 0;
|
||||||
|
int right = x;
|
||||||
|
int ans = 0;
|
||||||
|
while (left <= right) {
|
||||||
|
int mid = left + (right - left) / 2;
|
||||||
|
if ((long) mid * mid > x) {
|
||||||
|
right = mid - 1;
|
||||||
|
} else {
|
||||||
|
ans = mid;
|
||||||
|
left = mid + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
79
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode72.java
Normal file
79
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode72.java
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
package cn.whaifree.redo.redo_24_4_27;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/4/29 11:48
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode72 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test()
|
||||||
|
{
|
||||||
|
Solution solution = new Solution();
|
||||||
|
int c = this.hashCode();
|
||||||
|
// 输出二进制
|
||||||
|
System.out.println(Integer.toBinaryString(c));
|
||||||
|
System.out.println(Integer.toBinaryString(c >>> 16));
|
||||||
|
System.out.println(Integer.toBinaryString(c & (c >>> 16)));
|
||||||
|
int i = solution.minDistance("ros", "horse");
|
||||||
|
System.out.println(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
/**
|
||||||
|
* dp[i][j] 表示word1的0-i变为word2的0-j至少需要的操作数
|
||||||
|
* '' h o r s e
|
||||||
|
* '' 0 1 2 3 4 5
|
||||||
|
* r 1 1 2 2 3 4
|
||||||
|
* o 2 2 1 2 3 4
|
||||||
|
* s 3 3 2 2 3 3
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* 相同
|
||||||
|
* [i-1][j-1]
|
||||||
|
*
|
||||||
|
* 不相同
|
||||||
|
* - 替换 [i-1][j-1] + 1
|
||||||
|
* - 增加 [i][j-1] + 1
|
||||||
|
* - 删除 [i-1][j] + 1
|
||||||
|
* @param word1
|
||||||
|
* @param word2
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int minDistance(String word1, String word2) {
|
||||||
|
int len1 = word1.length();
|
||||||
|
int len2 = word2.length();
|
||||||
|
int[][] dp = new int[len1 + 1][len2 + 1];
|
||||||
|
|
||||||
|
for (int i = 0; i <= len1; i++) {
|
||||||
|
dp[i][0] = i;
|
||||||
|
}
|
||||||
|
for (int i = 0; i <= len2; i++) {
|
||||||
|
dp[0][i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i <= len1; i++) {
|
||||||
|
for (int j = 1; j <= len2; j++) {
|
||||||
|
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
|
||||||
|
dp[i][j] = dp[i - 1][j - 1];
|
||||||
|
} else {
|
||||||
|
dp[i][j] =
|
||||||
|
Math.min(
|
||||||
|
dp[i - 1][j - 1] + 1, // 替换 [i-1][j-1]
|
||||||
|
Math.min(
|
||||||
|
dp[i - 1][j] + 1, // 增加 [i][j-1]
|
||||||
|
dp[i][j - 1] + 1) // 删除 [i-1][j]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dp[len1][len2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
38
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode75.java
Normal file
38
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode75.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package cn.whaifree.redo.redo_24_4_27;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/4/29 12:07
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode75 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
Solution solution = new Solution();
|
||||||
|
int[] nums = {2,0,2,1,1,0};
|
||||||
|
solution.sortColors(nums);
|
||||||
|
for (int i = 0; i < nums.length; i++) {
|
||||||
|
System.out.println(nums[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public void sortColors(int[] nums) {
|
||||||
|
int n0 = 0, n1 = 0; // 0的数量 0和1的数量
|
||||||
|
for(int i = 0; i < nums.length; i++){
|
||||||
|
int num = nums[i];
|
||||||
|
nums[i] = 2;
|
||||||
|
if(num < 2){
|
||||||
|
nums[n1++] = 1;
|
||||||
|
}
|
||||||
|
if(num < 1){
|
||||||
|
nums[n0++] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
78
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode912.java
Normal file
78
src/main/java/cn/whaifree/redo/redo_24_4_27/LeetCode912.java
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
package cn.whaifree.redo.redo_24_4_27;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/4/29 12:30
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode912 {
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
// new ArrayList<>().iterator().next()
|
||||||
|
int[] nums = new int[]{5,1,1,2,0,0};
|
||||||
|
int[] res = new Solution1().sortArray(nums);
|
||||||
|
System.out.println(Arrays.toString(res));
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public int[] sortArray(int[] nums) {
|
||||||
|
if (nums.length <= 1) {
|
||||||
|
return nums;
|
||||||
|
}
|
||||||
|
int mid = nums.length / 2;
|
||||||
|
int[] left = Arrays.copyOfRange(nums, 0, mid);
|
||||||
|
int[] right = Arrays.copyOfRange(nums, mid, nums.length);
|
||||||
|
left = sortArray(left);
|
||||||
|
right = sortArray(right);
|
||||||
|
return merge(left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] merge(int[] nums1, int[] nums2) {
|
||||||
|
int[] res = new int[nums1.length + nums2.length];
|
||||||
|
int index1 = 0;
|
||||||
|
int index2 = 0;
|
||||||
|
while (index1 < nums1.length && index2 < nums2.length) {
|
||||||
|
if (nums1[index1] < nums2[index2]) {
|
||||||
|
res[index1 + index2] = nums1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
res[index1 + index2] = nums2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (index1 < nums1.length) {
|
||||||
|
res[index1 + index2] = nums1[index1];
|
||||||
|
index1++;
|
||||||
|
}
|
||||||
|
while (index2 < nums2.length) {
|
||||||
|
res[index1 + index2] = nums2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution1 {
|
||||||
|
public int[] sortArray(int[] nums) {
|
||||||
|
sort(nums, 0, nums.length - 1);
|
||||||
|
return nums;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sort(int[] nums, int left, int right) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void swap(int[] nums, int i, int j) {
|
||||||
|
int temp = nums[i];
|
||||||
|
nums[i] = nums[j];
|
||||||
|
nums[j] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
131
src/main/java/cn/whaifree/selftDefinition/MyHashMap.java
Normal file
131
src/main/java/cn/whaifree/selftDefinition/MyHashMap.java
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
package cn.whaifree.selftDefinition;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/4/29 21:11
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class MyHashMap<K, V> {
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
MyHashMap<String, String> myHashMap = new MyHashMap<>();
|
||||||
|
myHashMap.put("12", "12");
|
||||||
|
for (int i = 0; i < 100; i++) {
|
||||||
|
myHashMap.put(String.valueOf(i), String.valueOf(i));
|
||||||
|
}
|
||||||
|
System.out.println(myHashMap.size());
|
||||||
|
for (int i = 0; i < 100; i++) {
|
||||||
|
System.out.println(myHashMap.get(String.valueOf(i)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Node<K,V>{
|
||||||
|
|
||||||
|
private K key;
|
||||||
|
private V value;
|
||||||
|
private Node<K,V> next;
|
||||||
|
public Node(K key,V value){
|
||||||
|
this.key = key;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
public Node(){
|
||||||
|
}
|
||||||
|
|
||||||
|
public Node(K key, V value, Node<K, V> next) {
|
||||||
|
this.key = key;
|
||||||
|
this.value = value;
|
||||||
|
this.next = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final float LOAD_FACTOR = 0.75f;
|
||||||
|
private int size;
|
||||||
|
Node<K, V>[] buckets;
|
||||||
|
final int DEFAULT_CAPACITY = 16;
|
||||||
|
|
||||||
|
public MyHashMap(int size) {
|
||||||
|
buckets = new Node[size];
|
||||||
|
size = 0;
|
||||||
|
}
|
||||||
|
public MyHashMap() {
|
||||||
|
buckets = new Node[DEFAULT_CAPACITY];
|
||||||
|
size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getIndex(K key,int length) {
|
||||||
|
return key.hashCode() % length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void put(K key, V value) {
|
||||||
|
put(key, value, buckets);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void put(K key, V value,Node<K, V>[] myBuckets) {
|
||||||
|
if (size >= myBuckets.length * LOAD_FACTOR) {
|
||||||
|
resize();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据hash获取桶的位置
|
||||||
|
int loc = getIndex(key, myBuckets.length);
|
||||||
|
Node<K, V> node = myBuckets[loc];
|
||||||
|
if (node == null) {
|
||||||
|
// 1. 空
|
||||||
|
myBuckets[loc] = new Node<>(key, value);
|
||||||
|
}else {
|
||||||
|
// 2. 不空,尾插入法
|
||||||
|
while (node.next != null) {
|
||||||
|
node = node.next;
|
||||||
|
}
|
||||||
|
node.next = new Node<>(key, value);
|
||||||
|
}
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
|
||||||
|
public V get(K key) {
|
||||||
|
int loc = getIndex(key,buckets.length);
|
||||||
|
if (buckets[loc] == null) {
|
||||||
|
return null;
|
||||||
|
}else {
|
||||||
|
Node<K, V> node = buckets[loc];
|
||||||
|
while (node != null) {
|
||||||
|
if (node.key.equals(key)) {
|
||||||
|
return node.value;
|
||||||
|
}
|
||||||
|
node = node.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resize() {
|
||||||
|
// 扩容
|
||||||
|
size = 0;
|
||||||
|
Node<K, V>[] newBuckets = new Node[buckets.length * 2];
|
||||||
|
reHash(newBuckets);
|
||||||
|
buckets = newBuckets;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 把原来元素全部重新散列到新表
|
||||||
|
* @param newBuckets
|
||||||
|
*/
|
||||||
|
public void reHash(Node<K, V>[] newBuckets) {
|
||||||
|
for (Node<K, V> node : buckets) {
|
||||||
|
if (node == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
while (node != null) {
|
||||||
|
put(node.key, node.value, newBuckets);
|
||||||
|
node = node.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +1,6 @@
|
|||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @Author whai文海
|
* @Author whai文海
|
||||||
@ -6,7 +9,53 @@
|
|||||||
*/
|
*/
|
||||||
public class TestInteger {
|
public class TestInteger {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) throws ExecutionException, InterruptedException {
|
||||||
|
|
||||||
|
// System.out.println(CompletableFuture.supplyAsync(new Supplier<Object>() {
|
||||||
|
// @Override
|
||||||
|
// public Object get() {
|
||||||
|
// try {
|
||||||
|
// Thread.sleep(1000);
|
||||||
|
// } catch (InterruptedException e) {
|
||||||
|
// throw new RuntimeException(e);
|
||||||
|
// }
|
||||||
|
// System.out.println("ssdfsdfs");
|
||||||
|
// return "fdsfsdfsdf";
|
||||||
|
// }
|
||||||
|
// }).get());
|
||||||
|
//
|
||||||
|
// CompletableFuture.runAsync(new Runnable() {
|
||||||
|
// @Override
|
||||||
|
// public void run() {
|
||||||
|
// try {
|
||||||
|
// Thread.sleep(10000);
|
||||||
|
// } catch (InterruptedException e) {
|
||||||
|
// throw new RuntimeException(e);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
CompletableFuture.allOf(
|
||||||
|
CompletableFuture.supplyAsync(
|
||||||
|
() -> {
|
||||||
|
try {
|
||||||
|
Thread.sleep(10000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
System.out.println("1");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
),
|
||||||
|
CompletableFuture.runAsync(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
System.out.println("2");
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user