Skip to content

Commit 9abe4d3

Browse files
author
chenpiqian
committed
00
1 parent 19309df commit 9abe4d3

16 files changed

Lines changed: 290 additions & 169 deletions

File tree

note/src/main/java/com/commonsjar/io/File_Utils.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ public class File_Utils {
1111
//复制文件夹以及文件夹中的子文件夹、文件
1212
@Test
1313
public void t() throws Exception{
14-
String src = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics";
15-
String tag = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics1";
14+
String src = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics";
15+
String tag = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics1";
1616
File s = new File(src);
1717
File t = new File(tag);
1818
FileUtils.copyDirectory(s, t);
@@ -21,16 +21,16 @@ public void t() throws Exception{
2121
//复制文件
2222
@Test
2323
public void t2() throws Exception{
24-
String src = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\Io.java";
25-
String tag = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics1\\I.java";
24+
String src = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\Io.java";
25+
String tag = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics1\\I.java";
2626
File s = new File(src);
2727
File t = new File(tag);
2828
FileUtils.copyFile(s, t);
2929
}
3030

3131
@Test
3232
public void t3() throws Exception{
33-
String tag = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\test.txt";
33+
String tag = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\test.txt";
3434
File t = new File(tag);
3535
FileUtils.writeStringToFile(t,"写入到文件的字符串","utf-8", true);
3636
//writeStringToFile(final File file, final String data, final Charset encoding, final boolean append)
@@ -41,8 +41,8 @@ public void t3() throws Exception{
4141
//将文件读取到字节数组,字节数组写入文件
4242
@Test
4343
public void t4() throws Exception{
44-
String s = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\Lang3.java";
45-
String t = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\Lang3.txt";
44+
String s = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\Lang3.java";
45+
String t = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\Lang3.txt";
4646
File sf = new File(s);
4747
File tf = new File(t);
4848
byte[] bytes = FileUtils.readFileToByteArray(sf);

note/src/main/java/com/commonsjar/io/Io_Utils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class Io_Utils {
1515
//从流中读取内容并转为List<String>
1616
@Test
1717
public void t1() throws Exception{
18-
String path1 = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\Lang3.java";
18+
String path1 = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\Lang3.java";
1919
InputStream is = new FileInputStream(path1);
2020
List<String> list = IOUtils.readLines(is,"utf-8");
2121
for (String line:list){
@@ -27,7 +27,7 @@ public void t1() throws Exception{
2727
//字符写入输出流
2828
@Test
2929
public void t2() throws Exception{
30-
String path1 = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\Lang3.txt";
30+
String path1 = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\Lang3.txt";
3131
OutputStream os = new FileOutputStream(path1);
3232
IOUtils.write("将字符串写入输出流",os,"utf-8");
3333
os.close();
@@ -37,7 +37,7 @@ public void t2() throws Exception{
3737
// try-width-resource,在try后面的括号中创建流,try代码块运行结束,括号中创建的流将会被自动关闭
3838
@Test
3939
public void t3() throws Exception{
40-
String path = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\Lang3.txt";
40+
String path = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\Lang3.txt";
4141
try (
4242
OutputStream os = new FileOutputStream(path);
4343
InputStream is = new FileInputStream(path);

note/src/main/java/com/commonsjar/io/basics/A_Stream.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class A_Stream {
1111
@Test
1212
public void r() throws Exception{
1313
//实例化一个输入流对象
14-
FileInputStream fis = new FileInputStream("E:\\workspace\\java-learn\\web-whole\\src\\main\\java\\ssm\\projectnote\\commonsjar\\io\\b_file01.txt");
14+
FileInputStream fis = new FileInputStream("getNodeEdgeNum:\\workspace\\java-learn\\web-whole\\src\\main\\java\\ssm\\projectnote\\commonsjar\\io\\b_file01.txt");
1515
//返回输入流中可被读取的字节(byte)数,文件使用utf-8编码,一个中文为3字节,一个数字、一个字母为1字节
1616
int size = fis.available();
1717
byte[] array = new byte[size];
@@ -25,7 +25,7 @@ public void r() throws Exception{
2525
@Test
2626
public void w() throws Exception{
2727
//文件file_w01.txt不存在,则创建文件。文件存在,则新内容覆盖就内容
28-
FileOutputStream fos = new FileOutputStream("E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file_w01.txt");
28+
FileOutputStream fos = new FileOutputStream("getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file_w01.txt");
2929
String string = "文字123abc.";
3030
byte[] array = string.getBytes();
3131
fos.write(array); //FileOutputStream操作的是字节流,所以要将string转为字节数组,write参数类型之一也是字节数组
@@ -35,12 +35,12 @@ public void w() throws Exception{
3535
//读取文件,写入文件,实现图片复制
3636
@Test
3737
public void rw() throws Exception{
38-
FileInputStream fis = new FileInputStream("E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file-img-r01.png");
38+
FileInputStream fis = new FileInputStream("getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file-img-r01.png");
3939
int size = fis.available();
4040
byte[] array = new byte[size];
4141
fis.read(array); //将字节流读取到内存字节数组中,array元素全是8为二进制组成的数字
4242

43-
FileOutputStream fos = new FileOutputStream("E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file-img-r01-copy.png");
43+
FileOutputStream fos = new FileOutputStream("getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file-img-r01-copy.png");
4444
fos.write(array); //字节数组通过FileOutputStream流写入到文件
4545
fis.close(); //关流后,fis.available()抛异常,提示流已经关闭,关流就将fis释放,占用的内存也释放了
4646
fos.close();

note/src/main/java/com/commonsjar/io/basics/B_File.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ public class B_File {
1212
@Test
1313
public void file1() throws Exception{
1414
//构造函数1,通过文件路径创建File
15-
File file = new File("E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file-img-r01.png");
15+
File file = new File("getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file-img-r01.png");
1616
System.out.println(file);
1717
}
1818

1919
@Test
2020
public void file2() throws Exception{
2121
//构造函数2,通过new出文件夹的File对象,再new出文件夹中文件的File对象。
22-
File parentFile = new File("E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\bfile\\a");
22+
File parentFile = new File("getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\bfile\\a");
2323
//parentFile.mkdir(); //目录: D:/a/b 若D:/a存在,则创建b,若D:/a不存在,无法创建b
2424
parentFile.mkdirs(); //目录: D:/a/b 若D:/a不存在,也可以创建D:/a/b
2525
File file = new File(parentFile, "b_file-img-r01.png");
@@ -31,16 +31,16 @@ public void file2() throws Exception{
3131
@Test
3232
public void file3() throws Exception{
3333
//通过文件夹路径、文件名的形式创建File实例
34-
//String parentFilePath = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\bfile\\a\\文件夹不存在";
35-
String parentFilePath = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\bfile\\a";
34+
//String parentFilePath = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\bfile\\a\\文件夹不存在";
35+
String parentFilePath = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\bfile\\a";
3636
File file = new File(parentFilePath, "b_file-img-r01.png");
3737
System.out.println("文件是否存在: "+file.exists());
3838
}
3939

4040
@Test
4141
public void method() throws Exception{
4242

43-
String path = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io";
43+
String path = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io";
4444
File file = new File(path);
4545
//获取文件名
4646
String[] fileNames = file.list(); //如果file.exists()为false,文件不存在,这file.list()返回null

note/src/main/java/com/commonsjar/io/basics/C_Buffered.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ public class C_Buffered {
99
@Test
1010
public void file1() throws Exception{
1111

12-
String ip = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\c_big.png";
13-
String op = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\c_big_c.png";
12+
String ip = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\c_big.png";
13+
String op = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\c_big_c.png";
1414
InputStream is = new BufferedInputStream(new FileInputStream(ip));
1515
OutputStream os = new BufferedOutputStream(new FileOutputStream(op));
1616
byte[] array = new byte[1024*8]; //BufferedInputStream、BufferedOutputStream的默认的缓冲区大小都是8K

note/src/main/java/com/commonsjar/io/basics/D_Reader_Writer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ public class D_Reader_Writer {
2323
//字符流,可以读取文本文件;但不能读取图片、视频这种非文本类型的二进制文件
2424
@Test
2525
public void t() throws Exception{
26-
String r = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics\\b_file01.txt";
27-
String w = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics\\d_file01.txt";
26+
String r = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics\\b_file01.txt";
27+
String w = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\basics\\d_file01.txt";
2828
BufferedReader br = new BufferedReader(new FileReader(r));
2929
BufferedWriter bw = new BufferedWriter(new FileWriter(w));
3030

note/src/main/java/com/commonsjar/io/basics/E_In_Re_Ou_Wr.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public class E_In_Re_Ou_Wr {
1212
*/
1313
@Test
1414
public void t() throws Exception{
15-
String i = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file01.txt";
16-
String o = "E:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\E_file01.txt";
15+
String i = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\b_file01.txt";
16+
String o = "getNodeEdgeNum:\\workspace\\java-learn\\note\\src\\main\\java\\com\\commonsjar\\io\\E_file01.txt";
1717

1818
InputStreamReader isr = new InputStreamReader(new BufferedInputStream(new FileInputStream(i)));
1919
//转换流可设置编码
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.datastructure_arithmetic;
2+
3+
import com.datastructure_arithmetic.b_graph_base.Graph;
4+
5+
/**
6+
* @author chenpiqian
7+
* @date: 2019-10-28
8+
*/
9+
public class Components {
10+
11+
Graph G;
12+
private boolean[] visited;
13+
private int count;
14+
private int[] id;
15+
16+
public Components(Graph graph){
17+
G = graph;
18+
visited = new boolean[G.getNodeTotal()];
19+
id = new int[G.getNodeTotal()];
20+
count = 0;
21+
for (int i=0; i<G.getNodeTotal(); i++){
22+
visited[i] = false;
23+
id[i] = -1;
24+
}
25+
26+
for (int i=0; i<G.getNodeTotal(); i++){
27+
if (!visited[i]){
28+
deepFirstSearch(i);
29+
count++;
30+
}
31+
}
32+
}
33+
34+
private void deepFirstSearch(int node){
35+
visited[node] = true;
36+
id[node] = count;
37+
for (int i:G.adjacentNode(node)){
38+
if (!visited[i]){
39+
deepFirstSearch(node);
40+
}
41+
}
42+
}
43+
44+
int count(){
45+
return count;
46+
}
47+
48+
boolean isConnected(int node1, int node2){
49+
return id[node1] == id[node2];
50+
}
51+
}
Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,64 @@
11
package com.datastructure_arithmetic.b_graph_base;
22

3-
// 求无权图的联通分量
3+
// 求无权图的连通分量
44
public class Components {
55

66
Graph G; // 图的引用
7-
private boolean[] visited; // 记录dfs的过程中节点是否被访问
8-
private int ccount; // 记录联通分量个数
9-
private int[] id; // 每个节点所对应的联通分量标记
7+
private boolean[] visited; // 记录深度遍历的过程中节点是否被访问
8+
private int count; // 记录连通分量个数
9+
private int[] id; // 每个节点所对应的连通分量标记
1010

11-
// 图的深度优先遍历
12-
void dfs( int v ){
13-
14-
visited[v] = true;
15-
id[v] = ccount;
16-
17-
for( int i: G.adj(v) ){
18-
if( !visited[i] )
19-
dfs(i);
20-
}
21-
}
22-
23-
// 构造函数, 求出无权图的联通分量
11+
// 构造函数,求出无权图的连通分量
2412
public Components(Graph graph){
2513

2614
// 算法初始化
2715
G = graph;
28-
visited = new boolean[G.V()];
29-
id = new int[G.V()];
30-
ccount = 0;
31-
for( int i = 0 ; i < G.V() ; i ++ ){
16+
// visited数组长度是图节点的个数
17+
visited = new boolean[G.getNodeTotal()];
18+
id = new int[G.getNodeTotal()];
19+
count = 0;
20+
for( int i = 0 ; i < G.getNodeTotal() ; i ++ ){
21+
// 刚才开始,所有节点都没遍历
3222
visited[i] = false;
23+
// 刚才开始,每个节点不属于任何连通分量
3324
id[i] = -1;
3425
}
3526

36-
// 求图的联通分量
37-
for( int i = 0 ; i < G.V() ; i ++ )
27+
// 求图的连通分量
28+
for( int i = 0 ; i < G.getNodeTotal() ; i ++ )
3829
if( !visited[i] ){
39-
dfs(i);
40-
ccount ++;
30+
// i未遍历,深度遍历i
31+
deepFirstSearch(i);
32+
// i深度遍历完了,连通分量++
33+
count++;
4134
}
4235
}
4336

44-
// 返回图的联通分量个数
37+
// 图的深度优先遍历
38+
void deepFirstSearch(int node){
39+
40+
// 当前节点设置为已经遍历
41+
visited[node] = true;
42+
// 当前节点属于连通分量count
43+
id[node] = count;
44+
45+
// 深度遍历当前节点的相邻节点
46+
for( int i: G.adjacentNode(node) ){
47+
if( !visited[i] )
48+
deepFirstSearch(i);
49+
}
50+
}
51+
52+
// 返回图的连通分量个数
4553
int count(){
46-
return ccount;
54+
return count;
4755
}
4856

49-
// 查询点v和点w是否联通
50-
boolean isConnected( int v , int w ){
51-
assert v >= 0 && v < G.V();
52-
assert w >= 0 && w < G.V();
53-
return id[v] == id[w];
57+
// 查询点node1和点node2是否连通
58+
boolean isConnected(int node1, int node2){
59+
assert node1 >= 0 && node1 < G.getNodeTotal();
60+
assert node2 >= 0 && node2 < G.getNodeTotal();
61+
return id[node1] == id[node2];
5462
}
55-
}
63+
64+
}

0 commit comments

Comments
 (0)