第14回Java勉強会

概要

詳細

  • StringBuffer?StringBuilder?
    文字列のクラスとして用意されているStringクラスは文字列に変更があると、新しい領域を確保します。
    文字列の値が頻繁に変更される場合はStringBuffer?StringBuilder?を使用すること元のデータ領域を利用できるので効率が良いです。
    • StringBuffer?クラス
      StringBuffer?はスレッドセーフなクラスです。複数のスレッドで使用する場合は同期を取っているので、マルチスレッド環境にて安全に使用することができます。
    • StringBuilder?クラス
      StringBuffer?とは違いスレッドセーフではありませんが、その分高速に処理が実行できます。
      単一のスレッドで使用する場合はこちらを使用することが勧められています。
      public class StringBuilderTest {
      
          public static void main(String[] args) {
              
              // StringBuilderのテストメソッドです。結果をstrで受け取ります
              String str = sbTest("hoge", "fuga", 10);
              
              // メソッドの処理結果を確認
              System.out.println(str);
              
          }
          
          /**
           * StringBuilderの使用例です。
           * @param source 元の文字列
           * @param strAdd 追加する文字列
           * @param num 追加する回数
           * @return 結合された文字列
           */
          private static String sbTest(String source, String strAdd, int num) {
              
              // StringBuilderのインスタンスを生成
              StringBuilder sb = new StringBuilder(source);
              
              // 引数numの分だけ文字列を追加
              for (int i = 0; i < num; i++) {
                  sb.append("," + strAdd);
              }
              
              // 結果はStringで返す
              return sb.toString();
              
          }
      
      }
  • Dateクラス、Calendarクラス、DateFormat?クラス
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    public class DateTest {
    
        public static void main(String[] args) {
    
            // Dateクラスを使用してみる
            Date d = new Date();
            System.out.println(d.toString());
    
            // showDateメソッド内でCalendarクラスを使用する
            showDate();
            
            // DateFormatクラスを使用する
            String date = getFormatDate();
            System.out.println(date);
        }
    
        /**
         * Calendarクラスを使用して日時を取得します
         * 
         * @return 日時情報の文字列
         */
        private static void showDate() {
    
            // CalendarクラスのstaticメソッドでCalendarのインスタンスを取得できます
            Calendar cal = Calendar.getInstance();
    
            // 年を取得し表示します
            System.out.print(cal.get(Calendar.YEAR) + "");
    
            // 月を取得し表示します(月の情報は0から始まります)
            System.out.print(cal.get(Calendar.MONTH) + 1 + "");
    
            // 日を取得し表示します
            System.out.print(cal.get(Calendar.DAY_OF_MONTH) + "");
    
            // 時間を取得し表示します
            System.out.print(cal.get(Calendar.HOUR_OF_DAY) + "");
            
            // 分を取得し表示します
            System.out.print(cal.get(Calendar.MINUTE) + "");
            
            // 秒を取得し表示します
            System.out.print(cal.get(Calendar.SECOND) + "");
            
            System.out.println();
    
        }
    
        /**
         * DateFormatクラスを使用して日時情報を取得します
         * @return 日時情報の文字列
         */
        private static String getFormatDate() {
    
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/M/dd kk:mm:ss E");
            
            String dateStr = sdf.format(new Date());
            
            return dateStr;
        }
  • Property
    プログラムで設定情報をプロパティファイルとして用意しておいて、プログラム上から設定ファイルの値を読み込んで使用することができます。
    Javaでは、定数やファイルパスなどの情報を「プロパティファイル」と呼ばれる、プログラムとは別のファイルにまとめておくことが推奨されています。こうすることで、汎用性の高いプログラムを作成できます。さらに、プロパティファイルを修正するだけで、再コンパイルをしなくても値の変更を反映させることができるので便利です。
    事前にプロパティファイルを用意する必要があります。
    プロパティファイル名:sample.properties
    (プロパティファイルはsrcフォルダに置いて下さい。)
    fores.url=http://www.fores.jp/
    fores.wiki=http://www.fores.jp/labs/wiki/
    ファイル名:PropertiesLoad?.java
    import java.util.ResourceBundle;
    
    public class PropertiesLoad {
        
        public static void main(String[] args) {
            
            // リソースバンドルを取得する
            // リソース(資源)バンドル(セット)
            
            // プロパティファイル名指定します
            ResourceBundle rb = ResourceBundle.getBundle("sample");
            
            // プロパティファイルの値をキーを指定して取得します
            String fores_url = rb.getString("fores.url");
            System.out.println(fores_url);
            
            // プロパティファイルの値をキーを指定して取得します
            String fores_wiki = rb.getString("fores.wiki");
            System.out.println(fores_wiki);
            
            
        }
    
    }
  • Comparator
    いろいろなフィールドを持ったオブジェクトを比較するために比較するためのクラスでComparatorというインターフェースを実装します。
    標準ライブラリのCollectionsというユーティリティクラスを使用して並べ替えなどを行うことができます。
     
    会員情報を表すクラス
    ファイル名:Member.java
    /**
     * 会員クラス
     */
    public class Member {
    
        /** 名前 */
        private String name;
    
        /** 年齢 */
        private int age;
    
        public Member() {
            super();
        }
    
        public Member(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
    
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
    
        /**
         * @return the age
         */
        public int getAge() {
            return age;
        }
    
        /**
         * @param age the age to set
         */
        public void setAge(int age) {
            this.age = age;
        }
    
        /* (非 Javadoc)
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString() {
    
            return name + "," + age;
    
        }
    
    }
    会員を比較するためのクラス(Comparatorをimplementsします)
    ファイル名:MemberComp?.java
    import java.util.Comparator;
    
    /**
     * 「Member」という会員オブジェクトを比較するためのクラス
     */
    public class MemberComp implements Comparator {
    
        /* (非 Javadoc)
         * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
         */
        public int compare(Object arg0, Object arg1) {
    
            // 比較するオブジェクトを取得します
            Member mem0 = (Member) arg0;
    
            Member mem1 = (Member) arg1;
    
            // 名前が同じ場合
            if (mem0.getName().equals(mem1.getName())) {
    
                // 年齢の比較結果を返します
                return mem0.getAge() - mem1.getAge();
            }
    
            // 名前の比較結果を返します
            return mem0.getName().compareTo(mem1.getName());
        }
    
    }
    対象の会員クラス(Member)をComparatorを実装したMemberComp?で並べ替えを行います。
    ファイル名:CompareTest?.java
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class CompareTest {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
    
            // 比較用のリストを作成します
            List<Member> memList = new ArrayList<Member>();
    
            // 動作確認用に適当な値をリストに追加します
            memList.add(new Member("新井", 30));
            memList.add(new Member("金本", 29));
            memList.add(new Member("かきくけこ", 31));
            memList.add(new Member("あいうえお", 29));
    
            // コレクション用のユーティリティクラスを使用して並べ替えを行います
            Collections.sort(memList, new MemberComp());
    
            // 並べ替えた結果を順にコンソール出力して確認します
            for (Member member : memList) {
                System.out.println(member.toString());
            }
    
        }
    
    }

Java勉強会カリキュラムに戻る


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-01-10 (土) 12:37:41 (605d)