1. 程式人生 > >Java——第八章(集合類)——專案案例

Java——第八章(集合類)——專案案例

1、製造 3個骰子,各自打亂順序,搖三次,然後顯示各自骰子的大小。

骰子類:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ShaiZiThread extends Thread {
    private int num;
@Override
public void run() {
    // TODO Auto-generated method stub
    List list = new ArrayList();
    for (int i = 1
; i < 7; i++) { list.add(i); } Collections.shuffle(list); Collections.shuffle(list); Collections.shuffle(list); num =(int) list.get(0); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } }

測試類:

public class Test01 {

    public
static void main(String[] args) throws Exception { // TODO Auto-generated method stub ShaiZiThread szt = new ShaiZiThread(); ShaiZiThread szt1 = new ShaiZiThread(); ShaiZiThread szt2 = new ShaiZiThread(); szt.start(); szt1.start(); szt2.start(); Thread.sleep(1000
);//為了將3個骰子都搖完結束後再出結果。 int num = szt.getNum(); int num1 = szt1.getNum(); int num2 = szt2.getNum(); System.out.println("三個骰子 的 結果是: "+num+" , "+num1+" , "+num2); } }

2、全國身份證號歸屬地查詢。

要求:(提前將全國身份證號歸屬地查詢檔案下好。)
1.讀出檔案一行
2.判斷 身份證前6位 儲存 歸屬地 生成一個javabean
3.存入容器
4.鍵盤輸入身份證號 擷取前6位 容器中找 對應的歸屬地

身份證類:

public class ID {
    private String num;
    private String addr;
    public ID(String num, String addr) {
        super();
        this.num = num;
        this.addr = addr;
    }
    public ID() {
        super();
    }
    public String getNum() {
        return num;
    }
    public void setNum(String num) {
        this.num = num;
    }
    public String getAddr() {
        return addr;
    }
    public void setAddr(String addr) {
        this.addr = addr;
    }
    @Override
    public String toString() {
        return "ID [num=" + num + ", addr=" + addr + "]";
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((addr == null) ? 0 : addr.hashCode());
        result = prime * result + ((num == null) ? 0 : num.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        ID other = (ID) obj;
        if (addr == null) {
            if (other.addr != null)
                return false;
        } else if (!addr.equals(other.addr))
            return false;
        if (num == null) {
            if (other.num != null)
                return false;
        } else if (!num.equals(other.num))
            return false;
        return true;
    }

}

測試類:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

public class IDTest {

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        File file = new File("G:/yunke/全國身份證號歸屬地查詢.txt");
        FileReader fr= new FileReader(file);
        BufferedReader br = new BufferedReader(fr);

        String str = "";
        String s1 = "";
        String s2 = "";

        Set<ID> s = new HashSet<>();
        while((str=br.readLine())!=null)
        {
//          String [] sss=str.trim().split(" ");
            s1=str.substring(0, str.indexOf(" "));
            s2=str.substring(str.indexOf(" ")+1);

//          if(sss[01].length()==6)
//          {
//              
//              ID i = new ID(sss[0], sss[1]);
//              s.add(i);
//          
//          }
            if(s1.length()==6)
            {

                ID i = new ID(s1, s2);
                s.add(i);

            }

        }
        br.close();
        fr.close();


        Scanner sc = new Scanner(System.in);
        System.out.println("輸入省份證前6位");
        String ss=sc.next();
        String pre6=ss.substring(0, 6);

        for(Iterator<ID> it=s.iterator();it.hasNext();)
        {
            ID id = it.next();

            if(pre6.equals(id.getNum()))
            {
                System.out.println("您的歸屬地是: "+id.getAddr());
                break;
            }
        }

//      for(ID i :s)
//      {
//          if(ss.substring(0,6).equals(i.getNum()))
//          {
//              System.out.println("您的歸屬地是: "+i.getAddr());
//              break;
//          }
//      }




    }

}

用//表示的是另外一種方法。

執行結果:

這裡寫圖片描述

3、將上一道身份證題用Map集合來做,將身份證號做key,歸屬地做value。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

public class MapID {

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        File file = new File("g:/yunke/全國身份證號歸屬地查詢.txt");
        BufferedReader br = new BufferedReader(new FileReader(file));
        String str = "";
        HashMap<String, String> hm = new HashMap<>();
        while ((str = br.readLine()) != null) {
            String s[] = str.split(" ");
            String key = s[0].trim();
            String value = s[1].trim();
            if (key.length() == 6)
                hm.put(key, value);

        }

        Scanner sc = new Scanner(System.in);
        System.out.println("輸入你的身份證:");
        String ss = sc.next();
        String pre6 = ss.substring(0, 6);

        if(hm.containsKey(pre6))
        {
            System.out.println("您的歸屬地在: " + hm.get(pre6));
        }


//      Set<String> set = hm.keySet();
//      for (String key : set) {
//
//          if (pre6.equals(key)) {
//              System.out.println("您的歸屬地在: " + hm.get(key));
//          }
//      }

    }

}

4、遍歷方式,程式碼演示一下:

import java.util.ArrayList;
import java.util.Iterator;

public class Bianli {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList   al = new ArrayList();
        for (int i = 0; i < 10; i++) {
            al.add(i+"");
        }

        /*
         * 遍歷
         */

        //1、get方法

//      for (int i = 0; i < al.size(); i++) {
//          String str = (String) al.get(i);
//          System.out.println(str);
//      }

        //2、轉換為陣列

//      Object o[] = al.toArray();
//      for (int i = 0; i < o.length; i++) {
//          
//          String str= (String) o[i];
//          System.out.println(str);
//      }

        //3、for-each

        for(Object o : al)
        {
            String str = (String) o;
            System.out.println(str);
        }

        //4、遊標法  Iterator

        for(Iterator it = al.iterator();it.hasNext();)
        {

            Object o = it.next();//自動向下移動
            String str = (String) o;
            System.out.println(str);
        }


    }

}

5、有10人,分別有: 名字、 性別、 年齡、 家庭住址。

年齡在 10~100 ,要求隨機產生的10個數字

放入TreeSet

1.找出30~50之間的人的資訊

2.找出 70以上的人的資訊

人-類:

public class Person implements Comparable<Person>{
    private String name;
    private String sex;
    private Integer age;
    private String addr;
    public Person(String name, String sex, int age, String addr) {
        super();
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.addr = addr;
    }
    public Person() {
        super();
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAddr() {
        return addr;
    }
    public void setAddr(String addr) {
        this.addr = addr;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", sex=" + sex + ", age=" + age + ", addr=" + addr + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((addr == null) ? 0 : addr.hashCode());
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + ((sex == null) ? 0 : sex.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (addr == null) {
            if (other.addr != null)
                return false;
        } else if (!addr.equals(other.addr))
            return false;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (sex == null) {
            if (other.sex != null)
                return false;
        } else if (!sex.equals(other.sex))
            return false;
        return true;
    }
    @Override
    public int compareTo(Person p) {
        // TODO Auto-generated method stub
        return this.age.compareTo(p.age);
    }


}

測試類:

import java.util.Iterator;
import java.util.Random;
import java.util.TreeSet;

public class PersonTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Random r = new Random();
        TreeSet<Person> ts = new TreeSet();

        for (int i = 0; i < 10; i++) {

            int age=r.nextInt(89)+11;
            String name = "小明"+i;
            String sex = "男";
            String addr="家屬樓"+i+"號樓";
            Person p = new Person(name, sex, age, addr);
            ts.add(p);
        }

        System.out.println(ts);

        TreeSet t = (TreeSet) ts.subSet(new Person("asd", "asd", 30, "asds"), true, new Person("asd", "asd", 50, "asds"), true);
        TreeSet t1 = (TreeSet) ts.tailSet(new Person("asd", "asd", 70, "asds"), true);

        System.out.println("30-50的人:");
        for(Iterator it =t.iterator();it.hasNext();)
        {
            Person p =  (Person) it.next();
            System.out.println(p);
        }
        System.out.println("70以上的人:");
        for(Iterator it =t1.iterator();it.hasNext();)
        {
            Person p = (Person) it.next();
            System.out.println(p);
        }

    }

}

6、自定義一個類,例如Dog類,有狗的名字,類別,要求放入TreeSet當中,按照狗的名字排序,顯示出來。

Dog類:

public class Dog implements Comparable<Dog>{
    private String name;
    private String leibie;
    @Override
    public String toString() {
        return "Dog [name=" + name + ", leibie=" + leibie + "]";
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((leibie == null) ? 0 : leibie.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Dog other = (Dog) obj;
        if (leibie == null) {
            if (other.leibie != null)
                return false;
        } else if (!leibie.equals(other.leibie))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    public Dog(String name, String leibie) {
        super();
        this.name = name;
        this.leibie = leibie;
    }
    @Override
    public int compareTo(Dog o) {
        // TODO Auto-generated method stub
        return (this.name).compareTo(o.name);
    }

}

實現Comparable介面的同時,重寫CompareTo方法來規定按照什麼方式排序。

測試類:

import java.util.TreeSet;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TreeSet al = new TreeSet();

        Dog dog = new Dog("s", "阿拉斯加");
        Dog dog1 = new Dog("a", "賓利");
        Dog dog2 = new Dog("d", "牧羊犬");
        Dog dog3 = new Dog("b", "藏獒");
        Dog dog4 = new Dog("q", "狼狗");
        al.add(dog);
        al.add(dog1);
        al.add(dog2);
        al.add(dog3);
        al.add(dog4);
        /*
         * 利用hashcode和equals方法來共同判斷是不是同一個元素(不是同一個物件),
         * 沒有寫hashcode和equals方法的類將不能視為同一元素。系統類都有其方法。
         */

        System.out.println(al);

    }

}

執行結果:

這裡寫圖片描述

7、5000個隨機整數 ,存入 整數.txt ,
取出來, 找到 最大值、 最小值、 升序排列。 之後 寫入 排序.txt。

測試類:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.Random;
import java.util.TreeSet;

public class ZhengShu {

    /*
     * 5000個整數
     * 
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Random r = new Random();
        File file = new File("G:/yunke/整數.txt");

        BufferedWriter bw= new BufferedWriter(new FileWriter(file));
//      int a[] = new int[5000];
        for (int i = 0; i < 5000; i++) {
//          a[i]=r.nextInt(9999)+1;
            int temp = r.nextInt(9999)+1;
            bw.write(temp+"");
            bw.newLine();
            bw.flush();
        }

        BufferedReader br = new BufferedReader(new FileReader(new File("G:/yunke/整數.txt")));
        String str = "";
        TreeSet<Integer> ts = new TreeSet<>();
        while((str=br.readLine())!=null)
        {
            int temp1 =Integer.valueOf(str.trim());
            ts.add(temp1);

        }
        br.close();

//      for (int i = 0; i < 5000; i++) {
//          bw.write(a[i]+" ");
//          ts.add(a[i]);
//      }
//      
        int min=(int) ts.first();
        int max=(int) ts.last();

        System.out.println(ts);
        System.out.println("最大值:"+max);
        System.out.println("最小值:"+min);

        File file1=new File("G:/yunke/排序.txt");
        BufferedWriter bw1= new BufferedWriter(new FileWriter(file1));

        for (Iterator it = ts.iterator(); it.hasNext();) {

            int i =   (int) it.next();

            bw1.write(i+" ");
            bw1.flush();

        }


        bw.close();
        bw1.close();



    }

}

8、兩個人吃火鍋,要求鍋內放入的菜不能多於10個,多了會溢位,但是吃的時候不能少於0個。菜就按數字1100代替。

吃類:

import java.util.LinkedList;

public class ChiThread extends Thread   {
    private LinkedList<Integer>  ll;

    @Override
    public void run() {

    synchronized (ll) {
        while(true)
        {
            if(ll.size()<=0)
            {

                try {
                    ll.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }else
            {

            ll.removeLast();    
            System.out.println(Thread.currentThread().getName()+" 我吃了一個菜");

            ll.notify();
            }


        }


    }


    }

    public ChiThread(LinkedList<Integer> ll) {
        super();
        this.ll = ll;
    }

}

放類:

import java.util.LinkedList;

public class FangThread extends Thread{
    private LinkedList<Integer> ll;

    @Override
    public void run() {

        synchronized (ll) {

            while(true)
            {
                if(ll.size()>=10)
                {
                    try {
                        ll.wait();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }else{
                    ll.addFirst(1100);

                    System.out.println(Thread.currentThread().getName()+" 我加了個菜");
                    ll.notify();
                }


            }
        }
    }

    public FangThread(LinkedList<Integer> ll) {
        super();
        this.ll = ll;
    }


}

放滿十個後將執行緒等待,所有權給另一個執行緒吃,吃完剩0後將執行緒再喚醒,開始新增。設定死迴圈測試。

測試類:

import java.util.LinkedList;

public class HuoGuo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        LinkedList<Integer> ll = new LinkedList<>();
        FangThread ft = new FangThread(ll);
        ChiThread ct = new ChiThread(ll);
        ft.start();
        ct.start();


    }

}