集合難題

程式驛站發表於2020-12-24

封裝動態陣列

解題思路;和陣列一樣;難點是插入刪除的前後整體移動

  1. 設計一個Student類,該類中包括學生的姓名和成績。建立Student類的5個物件,如下所示:
    第三題我用迭代器做出來了
    在這裡插入圖片描述
    執行測試類
package 程式設計題1;

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



public class ArrayListUse {
	public static void main(String[] args) {
		ArrayList list =new ArrayList();
		Student p1=new Student("劉德華",85);
		Student p2=new Student("張學友",100);
		Student p3=new Student("劉傑",65);
		Student p4=new Student("章子怡",58);
		Student p5=new Student("周迅",76);
		list.add(p1);
		list.add(p2);
		list.add(p3);
		list.add(p4);
		list.add(p5);
		Iterator ss=list.iterator();
		int k=list.size();
		System.out.println(k);
		while(ss.hasNext()) {//用迭代器遍歷  要避免 ConcurrentModificationException   就是在使用迭代器之前,先不要刪除元素 屬於執行緒問題
			Student student=(Student)ss.next();
			Integer score=student.getScore();
			if(score<60) {
				System.out.println(student.getName());
			}
		}
			Student student=(Student)ss.next();
			Integer score=student.getScore();
			if(score<60) {
				System.out.println("不及格的是:"+student.getName());
			}
		}
		//用迭代器輸出刪除 劉傑後並列印    利用迭代器只能輸出一次的特帶你
		/*while(ss.hasNext()) {
			Student student=(Student)ss.next();
			String name=student.getName();
			if(name.equals("劉傑")) {
				continue;
				
			}else {
				System.out.println(student);
			}
		}*/
		for(int i=0;i<list.size();i++) {
			Student student=(Student)list.get(i);
			String name=student.getName();
			if(name.equals("劉傑")) {
				list.remove(i);
			}else {
				System.out.println(student);
			}
		}
		for(int i=0;i<list.size();i++) {
			Student student=(Student)list.get(i);
			String name=student.getName();
			if(name.equals("劉德華")) {
				student.setScore(95);
				System.out.println(student);
			}else {
				System.out.println(student);
			}
		}
		
	}

}

定義類

package 程式設計題1;

public class Student {
	private String name;
	private Integer score;
	
	public Student() {
	
		// TODO Auto-generated constructor stub
	}
	public Student(String name,Integer score) {
		this.name=name;
		this.score=score;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getScore() {
		return score;
	}
	public void setScore(Integer score) {
		this.score = score;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", score=" + score + "]";
	}
	

}

2.建立一個ArrayList物件,用來儲存1到10之間的數,打亂順序後輸出,按從小到大輸出,按從大到小輸出。

package 程式設計題2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

public class SuiJi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList list =new ArrayList();
		for(int i=1;i<=10;i++) {
			list.add(i);
		}
		//建立一個新的集合
		ArrayList newList =new ArrayList();
		//迴圈10次,並且將隨機出現的數當作下標新增到新集合
		for(int i=1;i<=10;i++) {
			Random ss=new Random();
			int s=ss.nextInt(list.size())+1;//將隨機出現的數當作list集合的下標 
			newList.add(list.get(s-1));   //將老集合出現的隨機下標 所在的值新增到新集合  
			list.remove(s-1);//老集合中隨機到的下標所i在的數直接刪除  此時 list集合的長度也會減一;下次迴圈 ,就是0到9的隨機數‘  這樣輸出的新集合是隨機的
			
			
		}
		for(int i=0;i<newList.size();i++) {
			int kkk=(int)newList.get(i);
			System.out.println(kkk);
		}
		System.out.println("--------------------------------------------------");
		//從小往大輸出
		int sss[]=new int[newList.size()];
		int index=0;
		for(int i=0;i<newList.size();i++) {
			sss[index++]=(int)newList.get(i);
		}
		Arrays.sort(sss);
		for(int s_ :sss) {
			System.out.print(s_+" ");
		}
		System.out.println();
		//從大往小輸出
		for(int i=(sss.length-1);i>=0;i--) {
			System.out.print(sss[i]+" ");
		}
		

	}

}
//結果
/*
7
9
2
1
8
3
4
10
5
6
--------------------------------------------------
1 2 3 4 5 6 7 8 9 10 
10 9 8 7 6 5 4 3 2 1 
*/
  1. 已知有十六支男子足球隊參加2008 北京奧運會。寫一個程式,把這16 支球隊隨機分為4 個組。
package 程式設計題3;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class FootBallTeam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList list=new ArrayList();
		list.add("象牙海岸");
		list.add("阿根延");
		list.add("澳大利亞");
		list.add("塞爾維亞");
		list.add("荷蘭");
		list.add("奈及利亞");
		list.add("日本");
		list.add("美國");
		list.add("中國");
		list.add("紐西蘭");
		list.add("巴西");
		list.add("比利時");
		list.add("韓國");
		list.add("喀麥隆");
		list.add("宏都拉斯");
		list.add("義大利");
		ArrayList list1=new ArrayList();
		ArrayList list2=new ArrayList();
		ArrayList list3=new ArrayList();
	    ArrayList list4=new ArrayList();
	    for(int i=0;i<16;i++) {
	    	Random ss=new Random();
	    	int num=ss.nextInt(list.size())+1;
	    	if(i<4) {
	    		
	    		list1.add(list.get(num-1));
	    		list.remove(num-1);
	    	}else if(i<8) {
	    		list2.add(list.get(num-1));
	    		list.remove(num-1);
	    	}else if(i<12) {
	    		list3.add(list.get(num-1));
	    		list.remove(num-1);
	    	}else {
	    		list4.add(list.get(num-1));
	    		list.remove(num-1);
	    	}
	    }
	    for(int i=0;i<list1.size();i++) {
	    	String str=(String)list1.get(i);
	    	System.out.print(str+"  ");
	    }
	    System.out.println();
	    for(int i=0;i<list2.size();i++) {
	    	String str=(String)list2.get(i);
	    	System.out.print(str+"  ");
	    }
	    System.out.println();
	    for(int i=0;i<list3.size();i++) {
	    	String str=(String)list3.get(i);
	    	System.out.print(str+"  ");
	    }
	    System.out.println();
	    for(int i=0;i<list4.size();i++) {
	    	String str=(String)list4.get(i);
	    	System.out.print(str+"  ");
	    }
	    System.out.println();
	

	}

}

4.Object類動態陣列

抽象介面

package 程式設計題9;

public interface DynamicArrayable {
	void add(Object obj);
	void add(int index,Object obj);
	void remove(int index);
	Object get(int index);
	void set(int index,Object obj);
	boolean contain(Object obj);
	

}

自定義類

package 程式設計題9;

public class DynamicArray implements DynamicArrayable {
	int arraySize;
	Object [] array;
	int size;
	public DynamicArray() {
		arraySize=10;
	}
	public DynamicArray(int arraySize) {
		this.arraySize=arraySize;
	}

	@Override
	public void add(Object obj) {
		// TODO Auto-generated method stub
		if(size==0) {
			array=new Object[arraySize];
		}
		if(size>=array.length) {
			Object newArray []=new Object [array.length+10];
			for(int i=0;i<array.length;i++) {
				newArray[i]=array[i];
			}
			array=newArray;
		}
		array[size]=obj;
		size++;
		
	}

	@Override
	public void add(int index, Object obj) {
		// TODO Auto-generated method stub
		if(size==0) {
			array=new Object[arraySize];
		}
		if(size>=array.length) {
			Object newArray []=new Object[array.length+10];
			for(int i=0;i<array.length;i++) {
				newArray[i]=array[i];
			}
			array=newArray;
		}
		for(int i=size-1;i>=index;i--) {
			array[i+1]=array[i];
		}
		array[index]=obj;
		size++;
		
	}

	@Override
	public void remove(int index) {
		// TODO Auto-generated method stub
		for(int i=index;i<size;i++) {
			array[i]=array[i+1];
		}
		array[size-1]=null;
		size--;
		
	}

	@Override
	public Object get(int index) {
		// TODO Auto-generated method stub
		return array[index];
	}

	@Override
	public void set(int index, Object obj) {
		// TODO Auto-generated method stub
		array[index]=obj;
		
	}

	@Override
	public boolean contain(Object obj) {
		// TODO Auto-generated method stub
		for(int i=0;i<array.length;i++) {
			if(obj.equals(array[i])) {
				return true;
			}
		}
		return false;
	}
	public int getSize() {
		return size;
	}

	
}

測試類

package 程式設計題9;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DynamicArray a=new DynamicArray();
		a.add("唐僧");
		a.add("孫悟空");
		a.add("豬八戒");
		a.add("沙和尚");
		a.add("六耳獼猴");
		boolean s=a.contain("孫悟空");
		System.out.println(s);
		int b=a.getSize();
		System.out.println(b);
		a.set(4, "如來");
		String Hero=(String)a.get(4);//因為寫的陣列是父型別
		System.out.println(Hero);
		

	}

}

相關文章