Java - コレクション


■ページ目次

Top

■コレクション

Top
コレクションの種類
Top

リスト

Top
ArrayList
■例題
  1. つぎ"ArrayList001.java"は、ArrayListを利用したサンプルです。
    1. import java.util.*;
    2. public class ArrayList001 {
    3. public static void main(String[] args) {
    4. List al = new ArrayList();
    5. for (int i = 0; i < args.length; i++) {
    6. al.add(args[i]);
    7. }
    8. System.out.println(al);
    9. }
    10. }

    □ 実行結果

    $ java ArrayList001 a s d f g
    [a, s, d, f, g]
    
  2. つぎ"ArrayList002.java"は、ArrayListを利用したサンプルです。
    1. import java.util.*;
    2. public class ArrayList002 {
    3. public static void main(String[] args) {
    4. List al = new ArrayList();
    5. al.add("maruno");
    6. al.add("yamada");
    7. al.add("suzuki");
    8. al.add("sato");
    9. System.out.println("before operation: " + al);
    10. switch (args[0].charAt(0)) {
    11. case 'q':
    12. if (al.contains(args[1])) {
    13. System.out.println(args[1] + " is contains ArrayList.");
    14. } else {
    15. System.out.println(args[1] + " is not contains ArrayList.");
    16. }
    17. break;
    18. case 'a':
    19. al.add(args[1]);
    20. System.out.println(args[1] + " is added to ArrayList.");
    21. break;
    22. case 'd':
    23. al.remove(args[1]);
    24. System.out.println(args[1] + " is removed from ArrayList.");
    25. break;
    26. default:
    27. System.out.println(args[0] + "th element is " + al.get(Integer.parseInt(args[0])));
    28. break;
    29. }
    30. System.out.println("after operation: " + al);
    31. }
    32. }

    □ 実行結果

    $ java ArrayList002 q suzuki
    before operation: [maruno, yamada, suzuki, sato]
    suzuki is contains ArrayList.
    after operation: [maruno, yamada, suzuki, sato]
    
    $ java ArrayList002 q saito
    before operation: [maruno, yamada, suzuki, sato]
    saito is not contains ArrayList.
    after operation: [maruno, yamada, suzuki, sato]
    
    $ java ArrayList002 a saito
    before operation: [maruno, yamada, suzuki, sato]
    saito is added to ArrayList.
    after operation: [maruno, yamada, suzuki, sato, saito]
    
    $ java ArrayList002 d maruno
    before operation: [maruno, yamada, suzuki, sato]
    maruno is removed from ArrayList.
    after operation: [yamada, suzuki, sato]
    
    $ java ArrayList002 2
    before operation: [maruno, yamada, suzuki, sato]
    2th element is suzuki
    after operation: [maruno, yamada, suzuki, sato]
    
  3. つぎ"ArrayList50.java"は、ArrayListを利用したサンプルです。
    1. import java.util.*;
    2. public class ArrayList50 {
    3. public static void main(String[] args) {
    4. List al = new ArrayList();
    5. for (int i = 0; i < 10; i++) {
    6. al.add(new Integer((int)(Math.random() * 10)));
    7. }
    8. System.out.println("before operation: " + al);
    9. for (int i = 0; i < 10; i++) {
    10. al.set(i, new Integer(((Integer)(al.get(i))).intValue() + 1));
    11. }
    12. System.out.println(" after operation: " + al);
    13. }
    14. }

    □ 実行結果

    $ java ArrayList50
    before operation: [2, 2, 8, 5, 0, 7, 5, 2, 6, 4]
     after operation: [3, 3, 9, 6, 1, 8, 6, 3, 7, 5]
    
■実習
  1. 上記"ArrayList001.java"を、コマンドラインからDoubleクラスのオブジェクトとして格納できるように改造して、コンパイル・実行してください。("ArrayList002.java")
    1. import java.util.*;
    2. public class ArrayList002 {
    3. public static void main(String[] args) {
    4. List al = new ArrayList();
    5. for (int i = 0; i < args.length; i++) {
    6. al.add(new Double(args[i]));
    7. }
    8. System.out.println(al);
    9. }
    10. }

    □ 実行結果

    $ >java ArrayList002 5 -3 1 -2 4
    [5.0, -3.0, 1.0, -2.0, 4.0]
    
  2. 10個のInteger型の要素からなるArrayListがあります。この要素を前に2つずらすアプリケーション"ArrayList13.java"をコンパイル・実行してください。
    1. import java.util.*;
    2. public class ArrayList13 {
    3. public static void main( String[] args ) {
    4. List al = new ArrayList();
    5. for ( int i = 0; i < 10; i++ ) {
    6. al.add(new Integer(i));
    7. }
    8. System.out.println("before: " + al);
    9. for ( int i = 0; i < 2; i++ ) {
    10. // ここにコードを追加してください。
    11. }
    12. System.out.println("after: " + al);
    13. }
    14. }

    □ 実行結果

    $ java ArrayList13
    before: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    after: [2, 3, 4, 5, 6, 7, 8, 9, 0, 1]
    
Top
■セット商品のList管理
  1. "SetProduct.java"で、セット商品をListで管理するようにしてください。("SetProduct.java")
    1. // 1401
    2. // package product;
    3. import java.util.*;
    4. // セット商品クラスです。
    5. // ひとつまたは複数の商品を集めて、割引したものをセット商品として扱います。
    6. // セット商品に対するフィールドやフィールドを操作するためのメソッドを
    7. // 提供しています。
    8. public class SetProduct extends AbstractProduct implements DiscountInterface {
    9. private int discount; // セット商品割引率
    10. private List products; // セット商品リスト
    11. :
    12. // セット商品を設定します。
    13. public void setProducts(List products) {
    14. this.products = products;
    15. }
    16. // セット商品を取得します。
    17. public List getProducts() {
    18. return products;
    19. }
    20. // セット商品に商品を追加します。
    21. public void add(Product product) {
    22. products.add(product);
    23. }
    24. // セット商品の商品を更新します。
    25. public void update(Product product) {
    26. for (int i = 0; i < products.size(); i++) {
    27. if (((Product)products.get(i)).equals(product)) {
    28. products.set(i, product);
    29. break;
    30. }
    31. }
    32. }
    33. // セット商品の商品を削除します。
    34. public void remove(String code) {
    35. for (int i = 0; i < products.size(); i++) {
    36. if (((Product)products.get(i)).getCode().equals(code)) {
    37. products.remove(i);
    38. break;
    39. }
    40. }
    41. }
    42. }
  2. つぎの"TestProduct.java"を作成し、実行してください。
    1. // 1401
    2. // package application;
    3. // import product.*;
    4. import java.util.*;
    5. // 商品クラスをテストするクラスです。
    6. public class TestProduct {
    7. public static void main(String[] args) {
    8. List p = new ArrayList();
    9. p.add(new DiscountProduct("A001", "パソコン", 188000, 20));
    10. p.add(new Product("P001", "プリンター", 24000));
    11. p.add(new DiscountProduct("C001", "CD-ROM", 6500, 10));
    12. p.add(new Product("M001", "USBメモリー", 9800));
    13. System.out.println("商品ArrayListのインスタンスを生成しました。 p = " + p);
    14. for (int i = 0; i < p.size(); i++) {
    15. System.out.println("商品のインスタンスを生成しました。 p(" + i + ") = " + p.get(i));
    16. }
    17. SetProduct s = new SetProduct("SA01", "パソコン・セット", 10, p);
    18. System.out.println("セット商品のインスタンスを生成しました。 s = " + s);
    19. System.out.println();
    20. s.add(new Product("H001", "ハードディスク", 9200));
    21. System.out.println("セット商品を追加しました。 s = " + s);
    22. System.out.println(" products = " + s.getProducts());
    23. System.out.println();
    24. s.update(new Product("C001", "DVD-ROM", 9200));
    25. System.out.println("セット商品を変更しました。 s = " + s);
    26. System.out.println(" products = " + s.getProducts());
    27. System.out.println();
    28. s.remove("M001");
    29. System.out.println("セット商品を削除しました。 s = " + s);
    30. System.out.println(" products = " + s.getProducts());
    31. System.out.println();
    32. }
    33. }

    □ 実行結果

    $ java -classpath classes application.TestProduct
    商品ArrayListのインスタンスを生成しました。 p = [[A001, パソコン, 150400, 20%],
    [P001, プリンター, 24000], [C001, CD-ROM, 5850, 10%], [M001, USBメモリー, 9800]]
    
    商品のインスタンスを生成しました。 p(0) = [A001, パソコン, 150400, 20%]
    商品のインスタンスを生成しました。 p(1) = [P001, プリンター, 24000]
    商品のインスタンスを生成しました。 p(2) = [C001, CD-ROM, 5850, 10%]
    商品のインスタンスを生成しました。 p(3) = [M001, USBメモリー, 9800]
    セット商品のインスタンスを生成しました。 s = [SA01, パソコン・セット, 10, 171045
    ]
    
    セット商品を追加しました。 s = [SA01, パソコン・セット, 10, 179325]
      products = [[A001, パソコン, 150400, 20%], [P001, プリンター, 24000], [C001, C
    D-ROM, 5850, 10%], [M001, USBメモリー, 9800], [H001, ハードディスク, 9200]]
    
    セット商品を変更しました。 s = [SA01, パソコン・セット, 10, 182340]
      products = [[A001, パソコン, 150400, 20%], [P001, プリンター, 24000], [C001, D
    VD-ROM, 9200], [M001, USBメモリー, 9800], [H001, ハードディスク, 9200]]
    
    セット商品を削除しました。 s = [SA01, パソコン・セット, 10, 173520]
      products = [[A001, パソコン, 150400, 20%], [P001, プリンター, 24000], [C001, D
    VD-ROM, 9200], [H001, ハードディスク, 9200]]
    
Top
LinkedList
■実習
  1. 上記"ArrayList001.java"をつぎのように改造して"LinkedList11.java"を作成ください。
    1. import java.util.*;
    2. public class LinkedList11 {
    3. public static void main(String[] args) {
    4. List ll = new LinkedList();
    5. for (int i = 0; i < args.length; i++) {
    6. // ここにコードを追加してください。
    7. }
    8. System.out.println(ll);
    9. }
    10. }

    □ 実行結果

    $ java LinkedList11 a s d f g
    [a, s, d, f, g]
    
  2. (オプション)
    "LinkedList11.java"をつぎのように改造して"LinkedList12.java"を作成してください。
    1. import java.util.*;
    2. public class LinkedList12 {
    3. public static void main(String[] args) {
    4. List ll = new LinkedList();
    5. for (int i = 0; i < args.length; i++) {
    6. // ここにコードを追加してください。
    7. }
    8. System.out.println(ll);
    9. }
    10. }

    □ 実行結果

    $ java LinkedList12 a s d f g
    [g, f, d, s, a]
    
Top

セット

Top
HashSet
Top
TreeSet
■例題
  1. Setを使ったサンプル"Set011.java"を作成ください。
    1. import java.util.*;
    2. public class Set011 {
    3. public static void main(String[] args) {
    4. Set ts = new TreeSet();
    5. Set hs = new HashSet();
    6. for (int i = 0; i < args.length; i++) {
    7. // ここにコードを追加してください。
    8. }
    9. System.out.println("***** TreeSet *****");
    10. System.out.println(ts);
    11. for (int i = 0; i < args.length; i++) {
    12. // ここにコードを追加してください。
    13. }
    14. System.out.println("***** HashSet *****");
    15. System.out.println(hs);
    16. }
    17. }

    □ 実行結果

    $ java Set011 a s d f g
    ***** TreeSet *****
    [a, d, f, g, s]
    ***** HashSet *****
    [d, a, f, g, s]
    
■実習
  1. "Set011.java"をつぎのように改造して、"Set0111.java"を作成ください。
  2. □ 実行結果

    $ java Set0111 -2 3 -4 -5
    ***** TreeSet *****
    [-5.0, -4.0, -2.0, 1.0, 3.0]
    ***** HashSet *****
    [3.0, -4.0, -5.0, 1.0, -2.0]
    
Top

イテレーターによる要素の順次取出し

Top
Iterator
Top
■例題
  1. "Set011.java"をつぎのように改造して、"Set012.java"を作成ください。
    1. import java.util.*;
    2. public class Set012 {
    3. public static void main(String[] args) {
    4. Set ts = new TreeSet();
    5. for (int i = 0; i < args.length; i++) {
    6. ts.add(args[i]);
    7. }
    8. Iterator itr = ts.iterator(); // イテレーターの宣言と生成
    9. while (itr.hasNext()) {
    10. System.out.println(itr.next());
    11. }
    12. }
    13. }

    □ 実行結果

    $ java Set012 Hello Java World
    Hello
    Java
    World
    
Top
■セット商品のSet管理
  1. "SetProduct.java"で、セット商品をListで管理するようにしてください。("SetProduct.java")
    1. // 1402
    2. // package product;
    3. import java.util.*;
    4. // セット商品クラスです。
    5. // ひとつまたは複数の商品を集めて、割引したものをセット商品として扱います。
    6. // セット商品に対するフィールドやフィールドを操作するためのメソッドを
    7. // 提供しています。
    8. public class SetProduct extends AbstractProduct implements DiscountInterface {
    9. private int discount; // セット商品割引率
    10. private Set products; // セット商品リスト
    11. :
    12. // 商品の売値の値を取得します。
    13. public int getPrice() {
    14. int price = 0;
    15. Iterator itr = products.iterator();
    16. while (itr.hasNext()) {
    17. price += ((Product)itr.next()).getPrice();
    18. }
    19. return (int)(price * (1 - discount / 100.0));
    20. }
    21. :
    22. // セット商品を設定します。
    23. public void setProducts(Set products) {
    24. this.products = products;
    25. }
    26. // セット商品を取得します。
    27. public Set getProducts() {
    28. return products;
    29. }
    30. // セット商品に商品を追加します。
    31. public void add(Product product) {
    32. products.add(product);
    33. }
    34. // セット商品の商品を更新します。
    35. public void update(Product product) {
    36. products.remove(product);
    37. products.add(product);
    38. }
    39. // セット商品の商品を削除します。
    40. public void remove(String code) {
    41. Product p = new Product(code, "", 0);
    42. products.remove(p);
    43. }
    44. }
  2. つぎの"TestProduct.java"を作成し、実行してください。
    1. // 1402
    2. package application;
    3. import product.*;
    4. import java.util.*;
    5. // 商品クラスをテストするクラスです。
    6. public class TestProduct {
    7. public static void main(String[] args) {
    8. Set p = new HashSet();
    9. p.add(new DiscountProduct("A001", "パソコン", 188000, 20));
    10. p.add(new Product("P001", "プリンター", 24000));
    11. p.add(new DiscountProduct("C001", "CD-ROM", 6500, 10));
    12. p.add(new Product("M001", "USBメモリー", 9800));
    13. System.out.println("商品HashSetのインスタンスを生成しました。 p = " + p);
    14. SetProduct s = new SetProduct("SA01", "パソコン・セット", 10, p);
    15. System.out.println("セット商品のインスタンスを生成しました。 s = " + s);
    16. System.out.println();
    17. s.add(new Product("H001", "ハードディスク", 9200));
    18. System.out.println("セット商品を追加しました。 s = " + s);
    19. System.out.println(" products = " + s.getProducts());
    20. System.out.println();
    21. s.update(new Product("C001", "DVD-ROM", 9200));
    22. System.out.println("セット商品を変更しました。 s = " + s);
    23. System.out.println(" products = " + s.getProducts());
    24. System.out.println();
    25. s.remove("M001");
    26. System.out.println("セット商品を削除しました。 s = " + s);
    27. System.out.println(" products = " + s.getProducts());
    28. System.out.println();
    29. }
    30. }

    □ 実行結果

    $ java -classpath classes application.TestProduct
    商品HashSetのインスタンスを生成しました。 p = [[M001, USBメモリー, 9800], [C001,
     CD-ROM, 5850, 10%], [P001, プリンター, 24000], [A001, パソコン, 150400, 20%]]
    セット商品のインスタンスを生成しました。 s = [SA01, パソコン・セット, 10, 171045
    ]
    
    セット商品を追加しました。 s = [SA01, パソコン・セット, 10, 179325]
      products = [[M001, USBメモリー, 9800], [C001, CD-ROM, 5850, 10%], [P001, プリ
    ンター, 24000], [H001, ハードディスク, 9200], [A001, パソコン, 150400, 20%]]
    
    セット商品を変更しました。 s = [SA01, パソコン・セット, 10, 182340]
      products = [[M001, USBメモリー, 9800], [C001, DVD-ROM, 9200], [P001, プリンタ
    ー, 24000], [H001, ハードディスク, 9200], [A001, パソコン, 150400, 20%]]
    
    セット商品を削除しました。 s = [SA01, パソコン・セット, 10, 173520]
      products = [[C001, DVD-ROM, 9200], [P001, プリンター, 24000], [H001, ハードデ
    ィスク, 9200], [A001, パソコン, 150400, 20%]]
    
Top
■セット商品のTereeSet管理
  1. つぎの"AbstractProduct.java"と、"TestProduct.java"を作成してください。
    TreeSetを使うために、商品オブジェクト(割引商品、セット商品を含む)に、大小関係を導入します。大小関係は、商品コードの関係とします。
    1. // 1403
    2. // package product;
    3. // 抽象商品クラスです。
    4. // 商品を扱うクラスが持っていなければならないメソッドを提供しています。
    5. public abstract class AbstractProduct implements Comparable {
    6. private String code; // 商品コード
    7. private String name; // 商品名
    8. // 商品オブジェクトの大小関係を判定します。
    9. public int compareTo(Object obj) {
    10. return this.getCode().compareTo(((AbstractProduct)obj).getCode());
    11. }
    12. :
    13. }
    1. // 1403
    2. // package application;
    3. // import product.*;
    4. import java.util.*;
    5. // 商品クラスをテストするクラスです。
    6. public class TestProduct {
    7. public static void main(String[] args) {
    8. TreeSet p = new TreeSet();
    9. p.add(new DiscountProduct("A001", "パソコン", 188000, 20));
    10. p.add(new Product("P001", "プリンター", 24000));
    11. p.add(new DiscountProduct("C001", "CD-ROM", 6500, 10));
    12. p.add(new Product("M001", "USBメモリー", 9800));
    13. System.out.println("商品TreeSetのインスタンスを生成しました。 p = " + p);
    14. SetProduct s = new SetProduct("SA01", "パソコン・セット", 10, p);
    15. System.out.println("セット商品のインスタンスを生成しました。 s = " + s);
    16. System.out.println();
    17. s.add(new Product("H001", "ハードディスク", 9200));
    18. System.out.println("セット商品を追加しました。 s = " + s);
    19. System.out.println(" products = " + s.getProducts());
    20. System.out.println();
    21. s.update(new Product("C001", "DVD-ROM", 9200));
    22. System.out.println("セット商品を変更しました。 s = " + s);
    23. System.out.println(" products = " + s.getProducts());
    24. System.out.println();
    25. s.remove("M001");
    26. System.out.println("セット商品を削除しました。 s = " + s);
    27. System.out.println(" products = " + s.getProducts());
    28. System.out.println();
    29. }
    30. }

    □ 実行結果

    $ java -classpath classes application.TestProduct
    商品TreeSetのインスタンスを生成しました。 p = [[A001, パソコン, 150400, 20%], [C
    001, CD-ROM, 5850, 10%], [M001, USBメモリー, 9800], [P001, プリンター, 24000]]
    セット商品のインスタンスを生成しました。 s = [SA01, パソコン・セット, 10, 171045
    ]
    
    セット商品を追加しました。 s = [SA01, パソコン・セット, 10, 179325]
      products = [[A001, パソコン, 150400, 20%], [C001, CD-ROM, 5850, 10%], [H001,
    ハードディスク, 9200], [M001, USBメモリー, 9800], [P001, プリンター, 24000]]
    
    セット商品を変更しました。 s = [SA01, パソコン・セット, 10, 182340]
      products = [[A001, パソコン, 150400, 20%], [C001, DVD-ROM, 9200], [H001, ハー
    ドディスク, 9200], [M001, USBメモリー, 9800], [P001, プリンター, 24000]]
    
    セット商品を削除しました。 s = [SA01, パソコン・セット, 10, 173520]
      products = [[A001, パソコン, 150400, 20%], [C001, DVD-ROM, 9200], [H001, ハー
    ドディスク, 9200], [P001, プリンター, 24000]]
    
Top
ListIterator
Top
■例題
  1. つぎの"ListIterator011.java"をコンパイル・実行してください。
    1. import java.util.*;
    2. public class ListIterator011 {
    3. public static void main(String[] args) {
    4. List al = new ArrayList();
    5. for (int i = 0; i < args.length; i++) {
    6. al.add(args[i]);
    7. }
    8. System.out.println(al);
    9. System.out.println("***** next *****");
    10. for (ListIterator i = al.listIterator(0); i.hasNext(); ) {
    11. System.out.println(i.next());
    12. }
    13. System.out.println("***** previous *****");
    14. for (ListIterator i = al.listIterator(al.size()); i.hasPrevious(); ) {
    15. System.out.println(i.previous());
    16. }
    17. }
    18. }

    □ 実行結果

    $ java ListIterator011 Hello Java World
    [Hello, Java, World]
    ***** next *****
    Hello
    Java
    World
    ***** previous *****
    World
    Java
    Hello
    
Top

マップ

Top
HashMap
Top
TreeMap
Top
■例題
  1. つぎの"TreeMap"と"HashMap"を使うアプリケーション"Map011.java"を作成ください。
    これには、偶数個のコマンドライン引数を指定します。はじめの引数には、Mapのキーを、つぎの引数にはその値を指定します。
    1. import java.util.*;
    2. public class Map011 {
    3. public static void main(String[] args) {
    4. Map ts = new TreeMap();
    5. for (int i = 0; i < args.length; i += 2) {
    6. ts.put(args[i], args[i+1]);
    7. }
    8. System.out.println("***** TreeMap *****");
    9. System.out.println(ts);
    10. Map hs = new HashMap();
    11. for (int i = 0; i < args.length; i += 2) {
    12. hs.put(args[i], args[i+1]);
    13. }
    14. System.out.println("***** HashMap *****");
    15. System.out.println(hs);
    16. }
    17. }

    □ 実行結果

    $ java Map011 3 c 2 b 5 e 1 a 4 d
    ***** TreeMap *****
    {1=a, 2=b, 3=c, 4=d, 5=e}
    ***** HashMap *****
    {3=c, 5=e, 2=b, 4=d, 1=a}
    
  2. つぎ"Map012.java"は、TreeMapを利用したサンプルです。
    1. import java.util.*;
    2. public class Map012 {
    3. public static void main(String[] args) {
    4. Map al = new TreeMap();
    5. al.put("maruno", "システム部");
    6. al.put("yamada", "開発部");
    7. al.put("suzuki", "システム部");
    8. al.put("sato", "営業部");
    9. System.out.println("before operation: " + al);
    10. switch (args[0].charAt(0)) {
    11. case 'q':
    12. System.out.println(args[1] + " is " + al.get(args[1]));
    13. break;
    14. case 'a':
    15. al.put(args[1], args[2]);
    16. System.out.println(args[1] + " is added to TreeMap.");
    17. break;
    18. case 'u':
    19. al.put(args[1], args[2]);
    20. System.out.println(args[1] + " is updated to TreeMap.");
    21. break;
    22. case 'd':
    23. al.remove(args[1]);
    24. System.out.println(args[1] + " is removed from TreeMap.");
    25. break;
    26. default:
    27. break;
    28. }
    29. System.out.println("after operation: " + al);
    30. }
    31. }

    □ 実行結果

    $ java Map012 q saito
    before operation: {maruno=システム部, sato=営業部, suzuki=システム部, yamada=開発部}
    saito is null
    after operation: {maruno=システム部, sato=営業部, suzuki=システム部, yamada=開発部}
    
    $ java Map012 a saito 総務部
    before operation: {maruno=システム部, sato=営業部, suzuki=システム部, yamada=開発部}
    saito is added to TreeMap.
    after operation: {maruno=システム部, saito=総務部, sato=営業部, suzuki=システム部, yamada=開発部}
    
    $ java Map012 u suzuki 営業部
    before operation: {maruno=システム部, sato=営業部, suzuki=システム部, yamada=開発部}
    suzuki is updated to TreeMap.
    after operation: {maruno=システム部, sato=営業部, suzuki=営業部, yamada=開発部}
    
    $ java Map012 d sato
    before operation: {maruno=システム部, sato=営業部, suzuki=システム部, yamada=開発部}
    sato is removed from TreeMap.
    after operation: {maruno=システム部, suzuki=システム部, yamada=開発部}
    
Top
■セット商品のMap管理
  1. "SetProduct.java"で、セット商品をMapで管理するようにしてください。("SetProduct.java")
    1. // 1404
    2. package product;
    3. import java.util.*;
    4. // セット商品クラスです。
    5. // ひとつまたは複数の商品を集めて、割引したものをセット商品として扱います。
    6. // セット商品に対するフィールドやフィールドを操作するためのメソッドを
    7. // 提供しています。
    8. public class SetProduct implements ProductInterface {
    9. private String code; // セット商品コード
    10. private String name; // セット商品名
    11. private int discount; // セット商品割引率
    12. private Map products; // セット商品リスト
    13. // セット商品クラスのコンストラクター。
    14. public SetProduct(String code, String name, int discount, Map products) {
    15. setCode(code);
    16. setName(name);
    17. setDiscount(discount);
    18. setProducts(products);
    19. }
    20. :
    21. // セット商品を取得します。
    22. public Map getProducts() {
    23. return products;
    24. }
    25. // 商品を追加します。
    26. public void add(Product product) {
    27. products.put(product.getCode(), product);
    28. }
    29. // 商品を更新します。
    30. public void update(Product product) {
    31. products.put(product.getCode(), product);
    32. }
    33. // 商品を削除します。
    34. public void remove(String code) {
    35. products.remove(code);
    36. }
    37. }
  2. つぎの"TestProduct.java"を作成し、実行してください。
    1. // 1404
    2. package application;
    3. import product.*;
    4. import java.util.*;
    5. // 商品クラスをテストするクラスです。
    6. public class TestProduct {
    7. public static void main(String[] args) {
    8. Map p = new TreeMap();
    9. p.put("A001", new DiscountProduct("A001", "パソコン", 188000, 20));
    10. p.put("P001", new Product("P001", "プリンター", 24000));
    11. p.put("C001", new DiscountProduct("C001", "CD-ROM", 6500, 10));
    12. p.put("M001", new Product("M001", "USBメモリー", 9800));
    13. System.out.println("商品TreeMapのインスタンスを生成しました。 p = " + p);
    14. SetProduct s = new SetProduct("SA01", "パソコン・セット", 10, p);
    15. System.out.println("セット商品のインスタンスを生成しました。 s = " + s);
    16. System.out.println();
    17. s.add(new Product("H001", "ハードディスク", 9200));
    18. System.out.println("セット商品を追加しました。 s = " + s);
    19. System.out.println(" products = " + s.getProducts());
    20. System.out.println();
    21. s.update(new Product("C001", "DVD-ROM", 9200));
    22. System.out.println("セット商品を変更しました。 s = " + s);
    23. System.out.println(" products = " + s.getProducts());
    24. System.out.println();
    25. s.remove("M001");
    26. System.out.println("セット商品を削除しました。 s = " + s);
    27. System.out.println(" products = " + s.getProducts());
    28. System.out.println();
    29. }
    30. }

    □ 実行結果

    $ java -classpath classes application.TestProduct
    商品TreeMapのインスタンスを生成しました。 p = {A001=[A001, パソコン, 150400, 20%
    ], C001=[C001, CD-ROM, 5850, 10%], M001=[M001, USBメモリー, 9800], P001=[P001,
    プリンター, 24000]}
    セット商品のインスタンスを生成しました。 s = [SA01, パソコン・セット, 10, 171045
    ]
    
    セット商品を追加しました。 s = [SA01, パソコン・セット, 10, 179325]
      products = {A001=[A001, パソコン, 150400, 20%], C001=[C001, CD-ROM, 5850, 10%]
    , H001=[H001, ハードディスク, 9200], M001=[M001, USBメモリー, 9800], P001=[P001,
     プリンター, 24000]}
    
    セット商品を変更しました。 s = [SA01, パソコン・セット, 10, 182340]
      products = {A001=[A001, パソコン, 150400, 20%], C001=[C001, DVD-ROM, 9200], H0
    01=[H001, ハードディスク, 9200], M001=[M001, USBメモリー, 9800], P001=[P001, プ
    リンター, 24000]}
    
    セット商品を削除しました。 s = [SA01, パソコン・セット, 10, 173520]
      products = {A001=[A001, パソコン, 150400, 20%], C001=[C001, DVD-ROM, 9200], H0
    01=[H001, ハードディスク, 9200], P001=[P001, プリンター, 24000]}
    
Top
■実習
  1. email名簿クラス("EmailList.java")があります。これを管理するためのクラス"EmailManage01.java"をMapを利用して作成してください。ここでは、コマンドラインから指定した文字列で、そのemail名簿を検索します。
    名簿はつぎのように設定します。
  2. 0101丸野maruno@abc.co.jp
    0201山田yamada@def.com
    0202鈴木suzuki@def.com
    0102佐藤sato@abc.co.jp

    "EmailList.java"

    1. public class EmailList {
    2. String id;
    3. String name;
    4. String email;
    5. EmailList(String id, String name, String email) {
    6. this.id = id;
    7. this.name = name;
    8. this.email = email;
    9. }
    10. }

    "EmailManage01.java"

    1. import java.util.*;
    2. public class EmailManage01 {
    3. public static void main(String[] args) {
    4. Map emailObject = new HashMap();
    5. // emailObject の設定
    6. final String[][] EMAIL_LIST = {
    7. {"0101", "丸野", "maruno@abc.co.jp"}
    8. , {"0201", "山田", "yamada@def.com"}
    9. , {"0202", "鈴木", "suzuki@def.com"}
    10. , {"0102", "佐藤", "sato@abc.co.jp"}
    11. };
    12. for (int i = 0; i < EMAIL_LIST.length; i++) {
    13. emailObject.put(EMAIL_LIST[i][0],
    14. new EmailList(EMAIL_LIST[i][0], EMAIL_LIST[i][1], EMAIL_LIST[i][2]));
    15. }
    16. // emailObject の検索
    17. if (/* ここにコードを記述してください */) {
    18. EmailList el = (EmailList)emailObject.get(args[0]);
    19. System.out.println("id = " + args[0]);
    20. System.out.println("name = " + el.name);
    21. System.out.println("email = " + el.email);
    22. } else {
    23. System.out.println("id = " + args[0] + " はありませんでした。");
    24. }
    25. }
    26. }

    □ 実行結果

    $ java EmailManage01 0102
    id    = 0102
    name  = 佐藤
    email = sato@abc.co.jp
    
    $ java EmailManage01 0203
    id = 0203 はありませんでした。
    
  3. (オプション)
    上記問題のemail名簿クラス("EmailList.java")をカプセル化してください。

  4. (オプション)
    上記問題のemail管理クラス("EmailManage01.java" は、id による照会ですが、name による照会に変更してください。

    □ email名簿クラス("EmailList.java", 変更ありません)

    1. public class EmailList {
    2. String id;
    3. String name;
    4. String email;
    5. EmailList(String id, String name, String email) {
    6. this.id = id;
    7. this.name = name;
    8. this.email = email;
    9. }
    10. public String toString() {
    11. return "[" + id + ", " + name + ", " + email + "]";
    12. }
    13. }

    □ email管理クラス("EmailManage03.java")

    1. import java.util.*;
    2. public class EmailManage03 {
    3. public static void main(String[] args) {
    4. Map emailObject = new HashMap(); // email リスト
    5. Map emailIndex = new HashMap(); // name と id を対応づける Map
    6. /*
    7. * emailIndex emailObject
    8. * name id id name email
    9. * ---- ---- ---- ---- -----------------
    10. * 丸野 0101 0101 丸野 maruno@abc.co.jp
    11. * 山田 0201 0201 山田 yamada@def.com
    12. * 鈴木 0202 0202 鈴木 suzuki@def.com
    13. * 佐藤 0102 0102 佐藤 sato@abc.co.jp
    14. */
    15. // emailObject の設定
    16. final String[][] EMAIL_LIST = { { "0101", "丸野", "maruno@abc.co.jp" },
    17. { "0201", "山田", "yamada@def.com" },
    18. { "0202", "鈴木", "suzuki@def.com" },
    19. { "0102", "佐藤", "sato@abc.co.jp" } };
    20. for (int i = 0; i < EMAIL_LIST.length; i++) {
    21. emailObject.put(EMAIL_LIST[i][0], new EmailList(EMAIL_LIST[i][0],
    22. EMAIL_LIST[i][1], EMAIL_LIST[i][2]));
    23. emailIndex.put(EMAIL_LIST[i][1], EMAIL_LIST[i][0]); // インデックスの設定
    24. }
    25. // emailObject の検索
    26. if (emailObject.containsKey(emailIndex.get(args[0]))) {
    27. // ここにコードを追加してください。
    28. System.out.println("id = " + el.id);
    29. System.out.println("name = " + el.name);
    30. System.out.println("email = " + el.email);
    31. } else {
    32. System.out.println("name = " + args[0] + " はありませんでした。");
    33. }
    34. }
    35. }

    □ 実行結果

    $ java EmailManage03 山田
    id    = 0201
    name  = 山田
    email = yamada@def.com
    
    $ java EmailManage03 山本
    name = 山本 はありませんでした。
    

  5. (オプション)
    上記問題のemail管理クラス("EmailManage01.java" では、現在、idによる照会しかできません。これを変更して、つぎの操作もできるようにしてください。このときの、コマンドライン引数も決めてください。
    照会なし または Q
    java EmailManage02 0101  または
    java EmailManage02 Q 0101
    
    追加 / 変更A / U
    java EmailManage02 A 0109 田中 tanaka@ghi.co.jp
    
    削除D
    java EmailManage02 D 0101
    

    □ email名簿クラス("EmailList.java")

    1. public class EmailList {
    2. String id;
    3. String name;
    4. String email;
    5. EmailList(String id, String name, String email) {
    6. this.id = id;
    7. this.name = name;
    8. this.email = email;
    9. }
    10. public String toString() {
    11. return "[" + id + ", " + name + ", " + email + "]";
    12. }
    13. }

    □ email管理クラス("EmailManage02.java")

    1. import java.util.*;
    2. public class EmailManage02 {
    3. static Map emailObject = new HashMap();
    4. public static void main(String[] args) {
    5. // emailObject の設定
    6. final String[][] EMAIL_LIST = {
    7. {"0101", "丸野", "maruno@abc.co.jp"}
    8. , {"0201", "山田", "yamada@def.com"}
    9. , {"0202", "鈴木", "suzuki@def.com"}
    10. , {"0102", "佐藤", "sato@abc.co.jp"}
    11. };
    12. for (int i = 0; i < EMAIL_LIST.length; i++) {
    13. emailObject.put(EMAIL_LIST[i][0],
    14. new EmailList(EMAIL_LIST[i][0], EMAIL_LIST[i][1], EMAIL_LIST[i][2]));
    15. }
    16. System.out.println("emailObject = " + emailObject);
    17. // 処理の切り分け
    18. switch (args[0].charAt(0)) {
    19. case 'q':
    20. case 'Q':
    21. queryEmailObject(args[1]);
    22. break;
    23. case 'd':
    24. case 'D':
    25. deleteEmailObject(args[1]);
    26. break;
    27. case 'a':
    28. case 'A':
    29. case 'u':
    30. case 'U':
    31. addEmailObject(args[1], args[2], args[3]);
    32. break;
    33. default:
    34. queryEmailObject(args[0]);
    35. break;
    36. }
    37. System.out.println("emailObject = " + emailObject);
    38. }
    39. // emailObject の照会
    40. static void queryEmailObject(String id) {
    41. // ここにコードを追加してください。
    42. }
    43. // emailObject の削除
    44. static void deleteEmailObject(String id) {
    45. // ここにコードを追加してください。
    46. }
    47. // emailObject の追加 / 変更
    48. static void addEmailObject(String id, String name, String email) {
    49. // ここにコードを追加してください。
    50. }
    51. }

    □ 実行結果

    $ java EmailManage02 0101
    emailObject = {0101=[0101, 丸野, maruno@abc.co.jp], 0202=[0202, 鈴木, suzuki@def
    .com], 0102=[0102, 佐藤, sato@abc.co.jp], 0201=[0201, 山田, yamada@def.com]}
    id    = 0101
    name  = 丸野
    email = maruno@abc.co.jp
    emailObject = {0101=[0101, 丸野, maruno@abc.co.jp], 0202=[0202, 鈴木, suzuki@def
    .com], 0102=[0102, 佐藤, sato@abc.co.jp], 0201=[0201, 山田, yamada@def.com]}
    
    $ java EmailManage02 q 0101
    emailObject = {0101=[0101, 丸野, maruno@abc.co.jp], 0202=[0202, 鈴木, suzuki@def
    .com], 0102=[0102, 佐藤, sato@abc.co.jp], 0201=[0201, 山田, yamada@def.com]}
    id    = 0101
    name  = 丸野
    email = maruno@abc.co.jp
    emailObject = {0101=[0101, 丸野, maruno@abc.co.jp], 0202=[0202, 鈴木, suzuki@def
    .com], 0102=[0102, 佐藤, sato@abc.co.jp], 0201=[0201, 山田, yamada@def.com]}
    
    $ java EmailManage02 d 0101
    emailObject = {0101=[0101, 丸野, maruno@abc.co.jp], 0202=[0202, 鈴木, suzuki@def
    .com], 0102=[0102, 佐藤, sato@abc.co.jp], 0201=[0201, 山田, yamada@def.com]}
    id = 0101 を削除しました。
    emailObject = {0202=[0202, 鈴木, suzuki@def.com], 0102=[0102, 佐藤, sato@abc.co.
    jp], 0201=[0201, 山田, yamada@def.com]}
    
    $ java EmailManage02 a 0901 田中 tanaka@ghi.co.jp
    emailObject = {0101=[0101, 丸野, maruno@abc.co.jp], 0202=[0202, 鈴木, suzuki@def
    .com], 0102=[0102, 佐藤, sato@abc.co.jp], 0201=[0201, 山田, yamada@def.com]}
    id = 0901 を追加しました。
    emailObject = {0101=[0101, 丸野, maruno@abc.co.jp], 0202=[0202, 鈴木, suzuki@def
    .com], 0102=[0102, 佐藤, sato@abc.co.jp], 0201=[0201, 山田, yamada@def.com], 090
    1=[0901, 田中, tanaka@ghi.co.jp]}
    
Top

inserted by FC2 system