SlideShare a Scribd company logo
Guava-samples



Subject 0. プログラムの実行時間を測りましょう
	    Sample0A(JDK 版)	   	   ・・・・・・・・・	                        Page 1
	    Sample0B(Guava 版) 	
                      	     ・・・・・・・・・	                        Page 2


Subject 1. コストの高い処理の結果をキャッシュしましょう
 	   Sample1A(キャッシュ無し版) 	
                       	                 ・・・・・	               Page 3
	    Sample1B(JDK 版)	   	   ・・・・・・・・・	                        Page 4
	    Sample1C(Guava 版) 	
                      	     ・・・・・・・・・	                        Page 5


Subject 2. あるリストを加工して別のリストを作りましょう
	    Sample2A(JDK 版)	   	   ・・・・・・・・・	                        Page 6
	    Sample2B(Guava 版) 	
                      	     ・・・・・・・・・	                        Page 7


Subject 3. ファイルの内容を標準出力へ出力しましょう
	    Sample3A(JDK 版 旧 io) ・・・・・・・・・
                         	         	                          Page 8
	    Sample3B(JDK 版 nio)	   ・・・・・・・・・	                        Page 9
	    Sample3C(Guava 版) 	
                      	     ・・・・・・・・・	                        Page10




                            Copyright © 2012 Akira Koyasu Some rights reserved.
Sample0A.java

 1 p a c k a g e guava.subject0;
 2
 3 /**
 4 * Subject 0. プログラムの実行時間を測りましょう
 5 * JDK版
 6 * @ a u t h o r koyasu
 7 */
 8 p u b l i c c l a s s Sample0A {
 9
10         p u b l i c s t a t i c v o i d main(String[] args) {
11
12                 // システム時間
13            l o n g time1 = System. currentTimeMillis ();
14
15            l o n g sum = 0;
16            f o r (i n t i = 0; i < Integer. MAX_VALUE ; i++) {
                      i
17                   sum += i;
18            }
19
20            l o n g time2 = System. currentTimeMillis ();
21
22            System. out .printf("sum: %d%n", sum);
23            // 引き算をします。
24            System. out .printf("time: %d ms%n", time2 - time1);
25      }
26 }
27




                                                                   Page 1
Sample0B.java

 1   p a c k a g e guava.subject0;
 2
 3   i m p o r t com.google.common.base.Stopwatch;
 4
 5   /**
 6    * Subject 0. プログラムの実行時間を測りましょう
 7 * Guava版
 8 * @ a u t h o r koyasu
 9 */
10 p u b l i c c l a s s Sample0B {
11
12         p u b l i c s t a t i c v o i d main(String[] args) {
13
14                 // ストップウォッチ!!
15             Stopwatch stopwatch = n e w Stopwatch().start();
16
17             l o n g sum = 0;
18             f o r (i n t i = 0; i < Integer. MAX_VALUE ; i++) {
                       i
19                    sum += i;
20             }
21
22             stopwatch.stop();
23
24             System. out .printf("sum: %d%n", sum);
25             System. out .printf("time: %s%n", stopwatch);
26        }
27 }
28




                                                                   Page 2
Sample1A.java

 1   p a c k a g e guava.subject1;
 2
 3   i m p o r t java.math.BigInteger;
 4
 5   i m p o r t com.google.common.base.Stopwatch;
 6
 7   /**
 8    * Subject 1. コストの高い処理の結果をキャッシュしましょう
 9 * キャッシュ無し版
10 * @ a u t h o r koyasu
11 */
12 p u b l i c c l a s s Sample1A {
13
14         p u b l i c s t a t i c v o i d main(String[] args) {
15
16                 Stopwatch stopwatch = n e w Stopwatch().start();
17
18                 BigInteger[] f;
19                 f = getFibonacci ();
20                 f = getFibonacci ();
21                 f = getFibonacci ();
22
23                 System. out .println(f[f.length - 1]);
24
25                 System. out .printf("time: %s%n", stopwatch);
26         }
27
28         /**
29           * 20000個のフィボナッチ数を返す
30          * @return
31          */
32        p r i v a t e s t a t i c BigInteger[] getFibonacci() {
33                f i n a l i n t n = 20000;
34                BigInteger[] f = n e w BigInteger[n];
35
36             f[0] = BigInteger. ZERO ;
37             f[1] = BigInteger. ONE ;
38             f o r (i n t i = 0; i < n - 2; i++) {
                         i
39                     f[i + 2] = f[i].add(f[i + 1]);
40             }
41             System. out .println("Calc fibonacci complete.");
42             r e t u r n f;
43        }
44 }
45




                                                            Page 3
Sample1B.java

 1   p a c k a g e guava.subject1;
 2
 3   i m p o r t java.math.BigInteger;
 4
 5   i m p o r t com.google.common.base.Stopwatch;
 6
 7   /**
 8    * Subject 1. コストの高い処理の結果をキャッシュしましょう
 9 * JDK版
10 * @ a u t h o r koyasu
11 */
12 p u b l i c c l a s s Sample1B {
13
14         p u b l i c s t a t i c v o i d main(String[] args) {
15
16                 Stopwatch stopwatch = n e w Stopwatch().start();
17
18                 BigInteger[] f;
19                 f = FibonacciCalculator. get ();
20                 f = FibonacciCalculator. get ();
21                 f = FibonacciCalculator. get ();
22
23                 System. out .println(f[f.length - 1]);
24
25                 System. out .printf("time: %s%n", stopwatch);
26         }
27
28         /**
29           * 20000個のフィボナッチ数を返すクラス
30          * @return
31          */
32        p r i v a t e s t a t i c c l a s s FibonacciCalculator {
33                p r i v a t e s t a t i c BigInteger[] f ;
34
35             p r i v a t e s t a t i c BigInteger[] get() {
36                     // キャッシュを自分で書くのが、良くない
37                  i f ( f == n u l l ) {
38                        s y n c h r o n i z e d (FibonacciCalculator.c l a s s ) {
                                                                       c
39                                i f ( f == n u l l ) {
40                                        f i n a l i n t n = 20000;
41                                        f = n e w BigInteger[n];
42
43                                   f [0] = BigInteger. ZERO ;
44                                   f [1] = BigInteger. ONE ;
45                                   f o r (i n t i = 0; i < n - 2; i++) {
                                             i
46                                         f [i+2] = f [i].add( f [i+1]);
47                                   }
48                                   System. out .println("Calc fibonacci complete.");
49                             }
50                      }
51                  }
52                  return f;
53             }
54        }
55 }
56




                                                                 Page 4
Sample1C.java

 1   p a c k a g e guava.subject1;
 2
 3   i m p o r t java.math.BigInteger;
 4
 5   i m p o r t com.google.common.base.Stopwatch;
 6   i m p o r t com.google.common.base.Supplier;
 7   i m p o r t com.google.common.base.Suppliers;
 8
 9   /**
10    * Subject 1. コストの高い処理の結果をキャッシュしましょう
11 * Guava版
12 * @ a u t h o r koyasu
13 */
14 p u b l i c c l a s s Sample1C {
15
16         p u b l i c s t a t i c v o i d main(String[] args) {
17
18                 Stopwatch stopwatch = n e w Stopwatch().start();
19
20                 BigInteger[] f;
21                 f = fibonacciSupplier .get();
22                 f = fibonacciSupplier .get();
23                 f = fibonacciSupplier .get();
24
25                 System. out .println(f[f.length - 1]);
26
27                 System. out .printf("time: %s%n", stopwatch);
28         }
29
30         // 初回の計算結果をキャッシュするサプライヤー
31        p r i v a t e s t a t i c Supplier<BigInteger[]> fibonacciSupplier
32                        = Suppliers. memoize (n e w Supplier<BigInteger[]>() {
                                                     n
33                p u b l i c BigInteger[] get() {
34                        f i n a l i n t n = 20000;
35                        BigInteger[] f = n e w BigInteger[n];
36
37                  f[0] = BigInteger. ZERO ;
38                  f[1] = BigInteger. ONE ;
39                  f o r (i n t i = 0; i < n - 2; i++) {
                              i
40                          f[i+2] = f[i].add(f[i+1]);
41                  }
42                  System. out .println("Calc fibonacci complete.");
43                  r e t u r n f;
44              }
45        });
46 }
47




                                                          Page 5
Sample2A.java

 1   p a c k a g e guava.subject2;
 2
 3   import   java.util.ArrayList;
 4   import   java.util.Collections;
 5   import   java.util.HashMap;
 6   import   java.util.List;
 7   import   java.util.Map;
 8
 9   i m p o r t com.google.common.base.Stopwatch;
10
11   /**
12    * Subject 2. あるリストを加工して別のリストを作りましょう
13 * JDK版
14 * @ a u t h o r koyasu
15 */
16 p u b l i c c l a s s Sample2A {
17
18         // 元のリスト
19        @SuppressWarnings("serial")
20        p r i v a t e s t a t i c List<Integer> srcList = n e w ArrayList<Integer>(){{
21                f o r (i n t i = 0; i < 1000; i++) {
                          i
22                      add(Integer. valueOf (i));
23                }
24        }};
25
26        // マスタマップ(不変にする)
27        @SuppressWarnings("serial")
28        p r i v a t e s t a t i c Map<Integer, String> map = Collections. unmodifiableMap (
29                      n e w HashMap<Integer, String>(){{
30                f o r (i n t i = 0; i < 10000; i++) {
                          i
31                      put(Integer. valueOf (i), "[" + i + "]の値");
32               }
33        }});
34
35        p u b l i c s t a t i c v o i d main(String[] args) {
36                System. out .printf("src[0]: %s%n", srcList .get(0));
37                System. out .printf("map[0]: %s%n", map .entrySet().iterator().next());
38
39               Stopwatch stopwatch = n e w Stopwatch().start();
40
41               List<String> dstList = n e w ArrayList<String>( srcList .size());
42               // ループして変換する
43               f o r (Integer src : srcList ) {
44                     String val = map .get(src);
45                     dstList.add(val);
46               }
47
48               stopwatch.stop();
49
50               System. out .printf("dst[0]: %s%n", dstList.get(0));
51               System. out .printf("time: %s%n", stopwatch);
52        }
53 }
54




                                                          Page 6
Sample2B.java

 1   p a c k a g e guava.subject2;
 2
 3   i m p o r t java.util.ArrayList;
 4   i m p o r t java.util.List;
 5   i m p o r t java.util.Map;
 6
 7   import   com.google.common.base.Function;
 8   import   com.google.common.base.Functions;
 9   import   com.google.common.base.Stopwatch;
10   import   com.google.common.collect.ImmutableMap;
11   import   com.google.common.collect.Iterables;
12   import   com.google.common.collect.Lists;
13
14   /**
15    * Subject 2. あるリストを加工して別のリストを作りましょう
16 * Guava版
17 * @ a u t h o r koyasu
18 */
19 p u b l i c c l a s s Sample2B {
20
21         // 元のリスト
22        @SuppressWarnings("serial")
23        p r i v a t e s t a t i c List<Integer> srcList = n e w ArrayList<Integer>(){{
24                f o r (i n t i = 0; i < 1000; i++) {
                          i
25                      add(Integer. valueOf (i));
26                }
27        }};
28
29        // マスタマップ(不変にする)
30        p r i v a t e s t a t i c f i n a l Map<Integer, String> map ;
31        static {
32                ImmutableMap.Builder<Integer, String> builder
33                              = ImmutableMap. builder ();
34                f o r (i n t i = 0; i < 10000; i++) {
                          i
35                      builder.put(Integer. valueOf (i), "[" + i + "]の値");
36             }
37             map = builder.build();
38        }
39
40        p u b l i c s t a t i c v o i d main(String[] args) {
41                System. out .printf("src[0]: %s%n", srcList .get(0));
42                System. out .printf("map[0]: %s%n", Iterables. get ( map .entrySet(), 0));
43
44             Stopwatch stopwatch = n e w Stopwatch().start();
45
46             // 変換関数で変換
47             List<String> dstList = Lists. transform (
48                         srcList , n e w Function<Integer, String>(){
49                 @Override
50                 p u b l i c String apply(Integer input) {
51                         r e t u r n map .get(input);
52                 }});
53
54             stopwatch.stop();
55
56             System. out .printf("dst[0]: %s%n", dstList.get(0));
57             System. out .printf("time: %s%n", stopwatch);
58
59             // 運が良ければこんな方法もある
60             List<String> dstList2 = Lists. transform (
61                     srcList , Functions. forMap ( map ));
62
63             System. out .println();
64             System. out .printf("dst2[0]: %s%n", dstList2.get(0));
65        }
66 }


                                                          Page 7
Sample3A.java

 1   p a c k a g e guava.subject3;
 2
 3   i m p o r t java.io.BufferedInputStream;
 4   i m p o r t java.io.FileInputStream;
 5   i m p o r t java.io.IOException;
 6
 7   i m p o r t com.google.common.base.Stopwatch;
 8
 9   /**
10    * Subject 3. ファイルの内容を標準出力へ出力しましょう
11 * JDK版 旧io
12 * @ a u t h o r koyasu
13 */
14 p u b l i c c l a s s Sample3A {
15
16         p u b l i c s t a t i c v o i d main(String[] args) {
17                 String path = "/path/to/file.txt";
18
19                 Stopwatch stopwatch = n e w Stopwatch().start();
20                 BufferedInputStream is = n u l l ;
21                 try {
22                       is = n e w BufferedInputStream(n e w FileInputStream(path));
                                                             n
23                       // バッファを用意する
24                  b y t e [] buf = n e w b y t e [0x1000];
25                  i n t len;
26                  // 読み出したバイトを書き込み
27                   w h i l e ((len = is.read(buf)) >= 0) {
28                           System. out .write(buf, 0, len);
29                   }
30             } c a t c h (IOException e) {
31                   e.printStackTrace();
32             } finally {
33                   i f (is != n u l l ) {
34                           try {
35                                 is.close();
36                           } c a t c h (IOException e) {
37                                 e.printStackTrace();
38                           }
39                   }
40             }
41             stopwatch.stop();
42
43             System. out .printf("time: %s%n", stopwatch);
44        }
45 }
46




                                                               Page 8
Sample3B.java

 1   p a c k a g e guava.subject3;
 2
 3   import   java.io.FileInputStream;
 4   import   java.io.FileNotFoundException;
 5   import   java.io.IOException;
 6   import   java.nio.channels.Channels;
 7   import   java.nio.channels.FileChannel;
 8
 9   i m p o r t com.google.common.base.Stopwatch;
10
11   /**
12    * Subject 3. ファイルの内容を標準出力へ出力しましょう
13 * JDK版 nio
14 * @ a u t h o r koyasu
15 */
16 p u b l i c c l a s s Sample3B {
17
18         p u b l i c s t a t i c v o i d main(String[] args) {
19                 String path = "/path/to/file.txt";
20
21                 Stopwatch stopwatch = n e w Stopwatch().start();
22
23                 FileChannel channel = n u l l ;
24                 try {
25                       // ファイルチャネルを使う(悪くない)
26                  channel = n e w FileInputStream(path).getChannel();
27                  channel.transferTo(0, channel.size(),
28                          Channels. newChannel (System. out ));
29
30             } c a t c h (FileNotFoundException e) {
31                   e.printStackTrace();
32             } c a t c h (IOException e) {
33                   e.printStackTrace();
34             } finally {
35                   i f (channel != n u l l ) {
36                         try {
37                               channel.close();
38                         } c a t c h (IOException e) {
39                               e.printStackTrace();
40                         }
41                   }
42             }
43
44
45             stopwatch.stop();
46
47             System. out .printf("time: %s%n", stopwatch);
48        }
49 }
50




                                                           Page 9
Sample3C.java

 1   p a c k a g e guava.subject3;
 2
 3   i m p o r t java.io.File;
 4   i m p o r t java.io.IOException;
 5
 6   i m p o r t com.google.common.base.Stopwatch;
 7   i m p o r t com.google.common.io.Files;
 8
 9   /**
10    * Subject 3. ファイルの内容を標準出力へ出力しましょう
11 * Guava版
12 * @ a u t h o r koyasu
13 */
14 p u b l i c c l a s s Sample3C {
15
16         p u b l i c s t a t i c v o i d main(String[] args) {
17                 String path = "/path/to/file.txt";
18
19                 Stopwatch stopwatch = n e w Stopwatch().start();
20                 try {
21                       // コピー!!
22                   Files. copy (n e w File(path), System. out );
                                  n
23             } c a t c h (IOException e) {
24                   e.printStackTrace();
25             }
26             stopwatch.stop();
27
28             System. out .printf("time: %s%n", stopwatch);
29        }
30 }
31




                                                          Page 10
Notes




This work is licensed under the Creative Commons Attribution-NonCommercial 3.0 Unported
License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/.

More Related Content

What's hot

定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系Coqについて
Yoshihiro Mizoguchi
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018
David Buck
 
Java SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRubyJava SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRuby
Hiroshi Nakamura
 
Coqチュートリアル
CoqチュートリアルCoqチュートリアル
Coqチュートリアル
Yoshihiro Mizoguchi
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
Masahiro Masuda
 
Halide for Memory
Halide for MemoryHalide for Memory
Halide for Memory
Koumei Tomida
 
X tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapiocaX tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapiocaxTAPP
 
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
Fujio Kojima
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
MITSUNARI Shigeo
 
20180728 halide-study
20180728 halide-study20180728 halide-study
20180728 halide-study
Fixstars Corporation
 
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現するiTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現するAtsushi Tadokoro
 
appengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlersappengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlers
Suguru ARAKAWA
 
20150701卒研進捗LT (share)
20150701卒研進捗LT (share)20150701卒研進捗LT (share)
20150701卒研進捗LT (share)mohemohe
 
GC in C++0x
GC in C++0xGC in C++0x
GC in C++0x
yak1ex
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 

What's hot (17)

定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系Coqについて
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018
 
Java SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRubyJava SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRuby
 
Coqチュートリアル
CoqチュートリアルCoqチュートリアル
Coqチュートリアル
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
Halide for Memory
Halide for MemoryHalide for Memory
Halide for Memory
 
X tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapiocaX tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapioca
 
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
 
20180728 halide-study
20180728 halide-study20180728 halide-study
20180728 halide-study
 
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現するiTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
 
appengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlersappengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlers
 
20150701卒研進捗LT (share)
20150701卒研進捗LT (share)20150701卒研進捗LT (share)
20150701卒研進捗LT (share)
 
GC in C++0x
GC in C++0xGC in C++0x
GC in C++0x
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 

Similar to Hello, Guava ! samples

C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
Fujio Kojima
 
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
Masahiro Sakai
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
Toshio Ehara
 
ソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグ
Toru Tamaki
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
Mr. Vengineer
 
第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersAdvancedTechNight
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
 
イチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコンイチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコン
三七男 山本
 
CPUから見たG1GC
CPUから見たG1GCCPUから見たG1GC
CPUから見たG1GC
Kenji Kazumura
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめ
gion_XY
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublic
T2C_
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)TatsuyaKatayama
 
pi-14. イベント, イベントハンドラ, ソケット通信
pi-14. イベント, イベントハンドラ, ソケット通信pi-14. イベント, イベントハンドラ, ソケット通信
pi-14. イベント, イベントハンドラ, ソケット通信
kunihikokaneko1
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会Koichi Sakata
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
 
DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.com
 

Similar to Hello, Guava ! samples (20)

C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
 
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
 
ソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグ
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
イチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコンイチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコン
 
CPUから見たG1GC
CPUから見たG1GCCPUから見たG1GC
CPUから見たG1GC
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめ
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublic
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
 
pi-14. イベント, イベントハンドラ, ソケット通信
pi-14. イベント, イベントハンドラ, ソケット通信pi-14. イベント, イベントハンドラ, ソケット通信
pi-14. イベント, イベントハンドラ, ソケット通信
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術
 

More from 輝 子安

Protractor under the hood
Protractor under the hoodProtractor under the hood
Protractor under the hood
輝 子安
 
そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)
輝 子安
 
Dockerで構成するWebサービス 〜EmotionTechの場合〜
Dockerで構成するWebサービス 〜EmotionTechの場合〜Dockerで構成するWebサービス 〜EmotionTechの場合〜
Dockerで構成するWebサービス 〜EmotionTechの場合〜
輝 子安
 
Workshop: Docker on Elastic Beanstalk
Workshop: Docker on Elastic BeanstalkWorkshop: Docker on Elastic Beanstalk
Workshop: Docker on Elastic Beanstalk
輝 子安
 
PHP conference 2013 ja report
PHP conference 2013 ja reportPHP conference 2013 ja report
PHP conference 2013 ja report
輝 子安
 
Scala for Java programmers
Scala for Java programmersScala for Java programmers
Scala for Java programmers
輝 子安
 
Garbage Collection for Dummies
Garbage Collection for DummiesGarbage Collection for Dummies
Garbage Collection for Dummies
輝 子安
 
JavaOne Guide for the Petite Bourgeoisie
JavaOne Guide for the Petite BourgeoisieJavaOne Guide for the Petite Bourgeoisie
JavaOne Guide for the Petite Bourgeoisie
輝 子安
 
Java, Moving Forward
Java, Moving ForwardJava, Moving Forward
Java, Moving Forward
輝 子安
 
Java, Up to Date
Java, Up to DateJava, Up to Date
Java, Up to Date
輝 子安
 
Java, Up to Date Sources
Java, Up to Date SourcesJava, Up to Date Sources
Java, Up to Date Sources
輝 子安
 
Hello, Guava !
Hello, Guava !Hello, Guava !
Hello, Guava !
輝 子安
 
Tokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo TyrantTokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo Tyrant
輝 子安
 

More from 輝 子安 (13)

Protractor under the hood
Protractor under the hoodProtractor under the hood
Protractor under the hood
 
そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)
 
Dockerで構成するWebサービス 〜EmotionTechの場合〜
Dockerで構成するWebサービス 〜EmotionTechの場合〜Dockerで構成するWebサービス 〜EmotionTechの場合〜
Dockerで構成するWebサービス 〜EmotionTechの場合〜
 
Workshop: Docker on Elastic Beanstalk
Workshop: Docker on Elastic BeanstalkWorkshop: Docker on Elastic Beanstalk
Workshop: Docker on Elastic Beanstalk
 
PHP conference 2013 ja report
PHP conference 2013 ja reportPHP conference 2013 ja report
PHP conference 2013 ja report
 
Scala for Java programmers
Scala for Java programmersScala for Java programmers
Scala for Java programmers
 
Garbage Collection for Dummies
Garbage Collection for DummiesGarbage Collection for Dummies
Garbage Collection for Dummies
 
JavaOne Guide for the Petite Bourgeoisie
JavaOne Guide for the Petite BourgeoisieJavaOne Guide for the Petite Bourgeoisie
JavaOne Guide for the Petite Bourgeoisie
 
Java, Moving Forward
Java, Moving ForwardJava, Moving Forward
Java, Moving Forward
 
Java, Up to Date
Java, Up to DateJava, Up to Date
Java, Up to Date
 
Java, Up to Date Sources
Java, Up to Date SourcesJava, Up to Date Sources
Java, Up to Date Sources
 
Hello, Guava !
Hello, Guava !Hello, Guava !
Hello, Guava !
 
Tokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo TyrantTokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo Tyrant
 

Recently uploaded

論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 

Recently uploaded (16)

論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 

Hello, Guava ! samples

  • 1. Guava-samples Subject 0. プログラムの実行時間を測りましょう Sample0A(JDK 版) ・・・・・・・・・ Page 1 Sample0B(Guava 版) ・・・・・・・・・ Page 2 Subject 1. コストの高い処理の結果をキャッシュしましょう Sample1A(キャッシュ無し版) ・・・・・ Page 3 Sample1B(JDK 版) ・・・・・・・・・ Page 4 Sample1C(Guava 版) ・・・・・・・・・ Page 5 Subject 2. あるリストを加工して別のリストを作りましょう Sample2A(JDK 版) ・・・・・・・・・ Page 6 Sample2B(Guava 版) ・・・・・・・・・ Page 7 Subject 3. ファイルの内容を標準出力へ出力しましょう Sample3A(JDK 版 旧 io) ・・・・・・・・・ Page 8 Sample3B(JDK 版 nio) ・・・・・・・・・ Page 9 Sample3C(Guava 版) ・・・・・・・・・ Page10 Copyright © 2012 Akira Koyasu Some rights reserved.
  • 2. Sample0A.java 1 p a c k a g e guava.subject0; 2 3 /** 4 * Subject 0. プログラムの実行時間を測りましょう 5 * JDK版 6 * @ a u t h o r koyasu 7 */ 8 p u b l i c c l a s s Sample0A { 9 10 p u b l i c s t a t i c v o i d main(String[] args) { 11 12 // システム時間 13 l o n g time1 = System. currentTimeMillis (); 14 15 l o n g sum = 0; 16 f o r (i n t i = 0; i < Integer. MAX_VALUE ; i++) { i 17 sum += i; 18 } 19 20 l o n g time2 = System. currentTimeMillis (); 21 22 System. out .printf("sum: %d%n", sum); 23 // 引き算をします。 24 System. out .printf("time: %d ms%n", time2 - time1); 25 } 26 } 27 Page 1
  • 3. Sample0B.java 1 p a c k a g e guava.subject0; 2 3 i m p o r t com.google.common.base.Stopwatch; 4 5 /** 6 * Subject 0. プログラムの実行時間を測りましょう 7 * Guava版 8 * @ a u t h o r koyasu 9 */ 10 p u b l i c c l a s s Sample0B { 11 12 p u b l i c s t a t i c v o i d main(String[] args) { 13 14 // ストップウォッチ!! 15 Stopwatch stopwatch = n e w Stopwatch().start(); 16 17 l o n g sum = 0; 18 f o r (i n t i = 0; i < Integer. MAX_VALUE ; i++) { i 19 sum += i; 20 } 21 22 stopwatch.stop(); 23 24 System. out .printf("sum: %d%n", sum); 25 System. out .printf("time: %s%n", stopwatch); 26 } 27 } 28 Page 2
  • 4. Sample1A.java 1 p a c k a g e guava.subject1; 2 3 i m p o r t java.math.BigInteger; 4 5 i m p o r t com.google.common.base.Stopwatch; 6 7 /** 8 * Subject 1. コストの高い処理の結果をキャッシュしましょう 9 * キャッシュ無し版 10 * @ a u t h o r koyasu 11 */ 12 p u b l i c c l a s s Sample1A { 13 14 p u b l i c s t a t i c v o i d main(String[] args) { 15 16 Stopwatch stopwatch = n e w Stopwatch().start(); 17 18 BigInteger[] f; 19 f = getFibonacci (); 20 f = getFibonacci (); 21 f = getFibonacci (); 22 23 System. out .println(f[f.length - 1]); 24 25 System. out .printf("time: %s%n", stopwatch); 26 } 27 28 /** 29 * 20000個のフィボナッチ数を返す 30 * @return 31 */ 32 p r i v a t e s t a t i c BigInteger[] getFibonacci() { 33 f i n a l i n t n = 20000; 34 BigInteger[] f = n e w BigInteger[n]; 35 36 f[0] = BigInteger. ZERO ; 37 f[1] = BigInteger. ONE ; 38 f o r (i n t i = 0; i < n - 2; i++) { i 39 f[i + 2] = f[i].add(f[i + 1]); 40 } 41 System. out .println("Calc fibonacci complete."); 42 r e t u r n f; 43 } 44 } 45 Page 3
  • 5. Sample1B.java 1 p a c k a g e guava.subject1; 2 3 i m p o r t java.math.BigInteger; 4 5 i m p o r t com.google.common.base.Stopwatch; 6 7 /** 8 * Subject 1. コストの高い処理の結果をキャッシュしましょう 9 * JDK版 10 * @ a u t h o r koyasu 11 */ 12 p u b l i c c l a s s Sample1B { 13 14 p u b l i c s t a t i c v o i d main(String[] args) { 15 16 Stopwatch stopwatch = n e w Stopwatch().start(); 17 18 BigInteger[] f; 19 f = FibonacciCalculator. get (); 20 f = FibonacciCalculator. get (); 21 f = FibonacciCalculator. get (); 22 23 System. out .println(f[f.length - 1]); 24 25 System. out .printf("time: %s%n", stopwatch); 26 } 27 28 /** 29 * 20000個のフィボナッチ数を返すクラス 30 * @return 31 */ 32 p r i v a t e s t a t i c c l a s s FibonacciCalculator { 33 p r i v a t e s t a t i c BigInteger[] f ; 34 35 p r i v a t e s t a t i c BigInteger[] get() { 36 // キャッシュを自分で書くのが、良くない 37 i f ( f == n u l l ) { 38 s y n c h r o n i z e d (FibonacciCalculator.c l a s s ) { c 39 i f ( f == n u l l ) { 40 f i n a l i n t n = 20000; 41 f = n e w BigInteger[n]; 42 43 f [0] = BigInteger. ZERO ; 44 f [1] = BigInteger. ONE ; 45 f o r (i n t i = 0; i < n - 2; i++) { i 46 f [i+2] = f [i].add( f [i+1]); 47 } 48 System. out .println("Calc fibonacci complete."); 49 } 50 } 51 } 52 return f; 53 } 54 } 55 } 56 Page 4
  • 6. Sample1C.java 1 p a c k a g e guava.subject1; 2 3 i m p o r t java.math.BigInteger; 4 5 i m p o r t com.google.common.base.Stopwatch; 6 i m p o r t com.google.common.base.Supplier; 7 i m p o r t com.google.common.base.Suppliers; 8 9 /** 10 * Subject 1. コストの高い処理の結果をキャッシュしましょう 11 * Guava版 12 * @ a u t h o r koyasu 13 */ 14 p u b l i c c l a s s Sample1C { 15 16 p u b l i c s t a t i c v o i d main(String[] args) { 17 18 Stopwatch stopwatch = n e w Stopwatch().start(); 19 20 BigInteger[] f; 21 f = fibonacciSupplier .get(); 22 f = fibonacciSupplier .get(); 23 f = fibonacciSupplier .get(); 24 25 System. out .println(f[f.length - 1]); 26 27 System. out .printf("time: %s%n", stopwatch); 28 } 29 30 // 初回の計算結果をキャッシュするサプライヤー 31 p r i v a t e s t a t i c Supplier<BigInteger[]> fibonacciSupplier 32 = Suppliers. memoize (n e w Supplier<BigInteger[]>() { n 33 p u b l i c BigInteger[] get() { 34 f i n a l i n t n = 20000; 35 BigInteger[] f = n e w BigInteger[n]; 36 37 f[0] = BigInteger. ZERO ; 38 f[1] = BigInteger. ONE ; 39 f o r (i n t i = 0; i < n - 2; i++) { i 40 f[i+2] = f[i].add(f[i+1]); 41 } 42 System. out .println("Calc fibonacci complete."); 43 r e t u r n f; 44 } 45 }); 46 } 47 Page 5
  • 7. Sample2A.java 1 p a c k a g e guava.subject2; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.HashMap; 6 import java.util.List; 7 import java.util.Map; 8 9 i m p o r t com.google.common.base.Stopwatch; 10 11 /** 12 * Subject 2. あるリストを加工して別のリストを作りましょう 13 * JDK版 14 * @ a u t h o r koyasu 15 */ 16 p u b l i c c l a s s Sample2A { 17 18 // 元のリスト 19 @SuppressWarnings("serial") 20 p r i v a t e s t a t i c List<Integer> srcList = n e w ArrayList<Integer>(){{ 21 f o r (i n t i = 0; i < 1000; i++) { i 22 add(Integer. valueOf (i)); 23 } 24 }}; 25 26 // マスタマップ(不変にする) 27 @SuppressWarnings("serial") 28 p r i v a t e s t a t i c Map<Integer, String> map = Collections. unmodifiableMap ( 29 n e w HashMap<Integer, String>(){{ 30 f o r (i n t i = 0; i < 10000; i++) { i 31 put(Integer. valueOf (i), "[" + i + "]の値"); 32 } 33 }}); 34 35 p u b l i c s t a t i c v o i d main(String[] args) { 36 System. out .printf("src[0]: %s%n", srcList .get(0)); 37 System. out .printf("map[0]: %s%n", map .entrySet().iterator().next()); 38 39 Stopwatch stopwatch = n e w Stopwatch().start(); 40 41 List<String> dstList = n e w ArrayList<String>( srcList .size()); 42 // ループして変換する 43 f o r (Integer src : srcList ) { 44 String val = map .get(src); 45 dstList.add(val); 46 } 47 48 stopwatch.stop(); 49 50 System. out .printf("dst[0]: %s%n", dstList.get(0)); 51 System. out .printf("time: %s%n", stopwatch); 52 } 53 } 54 Page 6
  • 8. Sample2B.java 1 p a c k a g e guava.subject2; 2 3 i m p o r t java.util.ArrayList; 4 i m p o r t java.util.List; 5 i m p o r t java.util.Map; 6 7 import com.google.common.base.Function; 8 import com.google.common.base.Functions; 9 import com.google.common.base.Stopwatch; 10 import com.google.common.collect.ImmutableMap; 11 import com.google.common.collect.Iterables; 12 import com.google.common.collect.Lists; 13 14 /** 15 * Subject 2. あるリストを加工して別のリストを作りましょう 16 * Guava版 17 * @ a u t h o r koyasu 18 */ 19 p u b l i c c l a s s Sample2B { 20 21 // 元のリスト 22 @SuppressWarnings("serial") 23 p r i v a t e s t a t i c List<Integer> srcList = n e w ArrayList<Integer>(){{ 24 f o r (i n t i = 0; i < 1000; i++) { i 25 add(Integer. valueOf (i)); 26 } 27 }}; 28 29 // マスタマップ(不変にする) 30 p r i v a t e s t a t i c f i n a l Map<Integer, String> map ; 31 static { 32 ImmutableMap.Builder<Integer, String> builder 33 = ImmutableMap. builder (); 34 f o r (i n t i = 0; i < 10000; i++) { i 35 builder.put(Integer. valueOf (i), "[" + i + "]の値"); 36 } 37 map = builder.build(); 38 } 39 40 p u b l i c s t a t i c v o i d main(String[] args) { 41 System. out .printf("src[0]: %s%n", srcList .get(0)); 42 System. out .printf("map[0]: %s%n", Iterables. get ( map .entrySet(), 0)); 43 44 Stopwatch stopwatch = n e w Stopwatch().start(); 45 46 // 変換関数で変換 47 List<String> dstList = Lists. transform ( 48 srcList , n e w Function<Integer, String>(){ 49 @Override 50 p u b l i c String apply(Integer input) { 51 r e t u r n map .get(input); 52 }}); 53 54 stopwatch.stop(); 55 56 System. out .printf("dst[0]: %s%n", dstList.get(0)); 57 System. out .printf("time: %s%n", stopwatch); 58 59 // 運が良ければこんな方法もある 60 List<String> dstList2 = Lists. transform ( 61 srcList , Functions. forMap ( map )); 62 63 System. out .println(); 64 System. out .printf("dst2[0]: %s%n", dstList2.get(0)); 65 } 66 } Page 7
  • 9. Sample3A.java 1 p a c k a g e guava.subject3; 2 3 i m p o r t java.io.BufferedInputStream; 4 i m p o r t java.io.FileInputStream; 5 i m p o r t java.io.IOException; 6 7 i m p o r t com.google.common.base.Stopwatch; 8 9 /** 10 * Subject 3. ファイルの内容を標準出力へ出力しましょう 11 * JDK版 旧io 12 * @ a u t h o r koyasu 13 */ 14 p u b l i c c l a s s Sample3A { 15 16 p u b l i c s t a t i c v o i d main(String[] args) { 17 String path = "/path/to/file.txt"; 18 19 Stopwatch stopwatch = n e w Stopwatch().start(); 20 BufferedInputStream is = n u l l ; 21 try { 22 is = n e w BufferedInputStream(n e w FileInputStream(path)); n 23 // バッファを用意する 24 b y t e [] buf = n e w b y t e [0x1000]; 25 i n t len; 26 // 読み出したバイトを書き込み 27 w h i l e ((len = is.read(buf)) >= 0) { 28 System. out .write(buf, 0, len); 29 } 30 } c a t c h (IOException e) { 31 e.printStackTrace(); 32 } finally { 33 i f (is != n u l l ) { 34 try { 35 is.close(); 36 } c a t c h (IOException e) { 37 e.printStackTrace(); 38 } 39 } 40 } 41 stopwatch.stop(); 42 43 System. out .printf("time: %s%n", stopwatch); 44 } 45 } 46 Page 8
  • 10. Sample3B.java 1 p a c k a g e guava.subject3; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.nio.channels.Channels; 7 import java.nio.channels.FileChannel; 8 9 i m p o r t com.google.common.base.Stopwatch; 10 11 /** 12 * Subject 3. ファイルの内容を標準出力へ出力しましょう 13 * JDK版 nio 14 * @ a u t h o r koyasu 15 */ 16 p u b l i c c l a s s Sample3B { 17 18 p u b l i c s t a t i c v o i d main(String[] args) { 19 String path = "/path/to/file.txt"; 20 21 Stopwatch stopwatch = n e w Stopwatch().start(); 22 23 FileChannel channel = n u l l ; 24 try { 25 // ファイルチャネルを使う(悪くない) 26 channel = n e w FileInputStream(path).getChannel(); 27 channel.transferTo(0, channel.size(), 28 Channels. newChannel (System. out )); 29 30 } c a t c h (FileNotFoundException e) { 31 e.printStackTrace(); 32 } c a t c h (IOException e) { 33 e.printStackTrace(); 34 } finally { 35 i f (channel != n u l l ) { 36 try { 37 channel.close(); 38 } c a t c h (IOException e) { 39 e.printStackTrace(); 40 } 41 } 42 } 43 44 45 stopwatch.stop(); 46 47 System. out .printf("time: %s%n", stopwatch); 48 } 49 } 50 Page 9
  • 11. Sample3C.java 1 p a c k a g e guava.subject3; 2 3 i m p o r t java.io.File; 4 i m p o r t java.io.IOException; 5 6 i m p o r t com.google.common.base.Stopwatch; 7 i m p o r t com.google.common.io.Files; 8 9 /** 10 * Subject 3. ファイルの内容を標準出力へ出力しましょう 11 * Guava版 12 * @ a u t h o r koyasu 13 */ 14 p u b l i c c l a s s Sample3C { 15 16 p u b l i c s t a t i c v o i d main(String[] args) { 17 String path = "/path/to/file.txt"; 18 19 Stopwatch stopwatch = n e w Stopwatch().start(); 20 try { 21 // コピー!! 22 Files. copy (n e w File(path), System. out ); n 23 } c a t c h (IOException e) { 24 e.printStackTrace(); 25 } 26 stopwatch.stop(); 27 28 System. out .printf("time: %s%n", stopwatch); 29 } 30 } 31 Page 10
  • 12. Notes This work is licensed under the Creative Commons Attribution-NonCommercial 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/.