Java——第八章(集合類)——專案案例
阿新 • • 發佈:2019-02-15
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();
}
}