Java開發筆記(六)之集合框架 List 、Set、Map細講

List 中元素是否存在實例

在這裏插入圖片描述

	/*
	 * 測試List的contains方法
	 */
	public void testListContains(){
		Course course=coursesToSelect.get(0);
		System.out.println("取得課程"+course.name);
		System.out.println("備選課程中是否包含課程"+course.name+","+coursesToSelect.contains(course));
		
		//創建一個新的課程,與course對象一致 要重寫Course equals方法。
		Course course2=new Course(course.id,course.name);
		System.out.println("取得課程"+course2.name);
		System.out.println("備選課程中是否包含課程"+course2.name+","+coursesToSelect.contains(course2));
		
		//
		System.out.println("請輸入課程名稱:");
		String name=console.next();
		Course course3 = new Course();
		course3.name=name;
		System.out.println("取得課程"+course3.name);
		System.out.println("備選課程中是否包含課程"+course3.name+","+coursesToSelect.contains(course3));

	}
	/*
	 * 測試List的contains方法 SetList.java
	 */
	public void testListContains(){
		Course course=coursesToSelect.get(0);
		System.out.println("取得課程"+course.name);
		System.out.println("備選課程中是否包含課程"+course.name+","+coursesToSelect.contains(course));
		
		//創建一個新的課程,與course對象一致 要重寫Course equals方法。
		Course course2=new Course(course.id,course.name);
		System.out.println("取得課程"+course2.name);
		System.out.println("備選課程中是否包含課程"+course2.name+","+coursesToSelect.contains(course2));
		
		//
		System.out.println("請輸入課程名稱:");
		String name=console.next();
		Course course3 = new Course();
		course3.name=name;
		System.out.println("取得課程"+course3.name);
		System.out.println("備選課程中是否包含課程"+course3.name+","+coursesToSelect.contains(course3));

	}
取得課程C語言
備選課程中是否包含課程C語言,true
取得課程C語言
備選課程中是否包含課程C語言,true
請輸入課程名稱:
數據結構
取得課程數據結構
備選課程中是否包含課程數據結構,true

Set 元素是否存在實例

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		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 (!(obj instanceof Course))
			return false;
		Course other = (Course) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	/*
	 * 測試Set的contains 方法
	 */
	public void testSetContains(){
		
		System.out.println("請輸入學生已選的課程名稱:");
		String name = console.next();
		Course course3 = new Course();
		course3.name = name;
		System.out.println("取得課程" + course3.name);
		System.out.println("備選課程中是否包含課程" + course3.name + "," + student.courses.contains(course3));
		
	}
有如下課程待選(通過ForEach訪問):
添加了課程2:C語言
添加了課程1:數據結構
添加了課程5:高等數學
添加了課程6:大學英語
添加了課程3:離散數學
添加了課程4:彙編語言
歡迎學生:小明選課!
請輸入課程ID
2
請輸入課程ID
1
請輸入課程ID
5
請輸入學生已選的課程名稱:
數據結構
取得課程數據結構
備選課程中是否包含課程數據結構,true

獲取索引位置

		//通過indexOf 獲取索引位置
		if (coursesToSelect.contains(course3)) {
			System.out.println("課程"+course3.name+"的索引位置爲:"+coursesToSelect.indexOf(course3) );
		}

Map 中是否包含指定的 key 和 value 實例

Student.java
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		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 (!(obj instanceof Student))
			return false;
		Student other = (Student) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	/*
	 * 測試Map中,是否包含Key值或者某個Value值
	 */
	public void testContainsKeyOrValue() {
		System.out.println("請輸入要查詢的學生ID:");
		Scanner console = new Scanner(System.in);
		String id = console.next();

		System.out.println("你輸入的學生id爲:" + id + "在學生映射表中是否存在: " + students.containsKey(id));

		if (students.containsKey(id)) {
			System.out.println("對應的學生爲:" + students.get(id).name);
		}

		System.out.println("請輸入要查詢的學生姓名:");
		String name = console.next();
		if (students.containsValue(new Student(null, name))) {
			System.out.println("在學生映射表中,確實存在學生:" + name);
		} else {
			System.out.println("在學生映射表中不存在該學生!");
		}

	}
請輸入學生ID
1
請輸入學生姓名:
中
成功添加學生:中
請輸入學生ID
2
請輸入學生姓名:
國
成功添加學生:國
請輸入學生ID
3
請輸入學生姓名:
強
成功添加學生:強
總共有:3個學生!
學生:中
學生:國
學生:強
請輸入要查詢的學生ID:
2
你輸入的學生id爲:2在學生映射表中是否存在: true
對應的學生爲:國
請輸入要查詢的學生姓名:
強
在學生映射表中,確實存在學生:強

Collections.sort() 實現 List 排序

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

/*
 * 1.對Integer泛型打的List進行排序
 * 2.String泛型的List進行排序
 * 3.其他泛型的List進行排序,以Student爲例
 */
public class CollecctionsTest {

	/*
	 * Integer泛型的List進行排序 插入十個100以內的不重複的隨機整數,並進行排序
	 */
	public void testIntegerSort() {
		List<Integer> integerList = new ArrayList<Integer>();
		Random random = new Random();
		Integer k;
		for (int i = 0; i < 10; i++) {
			do {
				k = random.nextInt(100);
			} while (integerList.contains(k));
			integerList.add(k);
			System.out.println("成功添加整數:" + k);
		}
		System.out.println("~~~~~~~~排序前~~~~~~~~~");
		for (Integer integer : integerList) {
			System.out.println("元素" + integer);
		}
		Collections.sort(integerList);
		System.out.println("~~~~~~~~排序後~~~~~~~~~");
		for (Integer integer : integerList) {
			System.out.println("元素" + integer);
		}
	}

	/*
	 * String泛型的List進行排序 添加三個亂序字符串,進行排序
	 */
	public void testStringSort() {
		List<String> stringList = new ArrayList<>();
		stringList.add("microsoft");
		stringList.add("google");
		stringList.add("lenovo");

		System.out.println("~~~~~~~排序前~~~~~~");
		for (String string : stringList) {
			System.out.println("元素:" + string);
		}
		Collections.sort(stringList);
		System.out.println("~~~~~~~排序後~~~~~~");
		for (String string : stringList) {
			System.out.println("元素:" + string);
		}
	}

	public static void main(String[] args) {
		CollecctionsTest ct = new CollecctionsTest();
		// ct.testIntegerSort();
		ct.testStringSort();
	}

}
~~~~~~~排序前~~~~~~
元素:microsoft
元素:google
元素:lenovo
~~~~~~~排序後~~~~~~
元素:google
元素:lenovo
元素:microsoft

Comparable --默認比較規則

在這裏插入圖片描述

Comparator --臨時比較規則

在這裏插入圖片描述
在這裏插入圖片描述

import java.util.HashSet;
import java.util.Set;

public class Student implements Comparable<Student> {
	public String id;
	public String name;
	public Set<Course> courses;

	public Student(String id, String name) {
		this.id = id;
		this.name = name;
		this.courses = new HashSet<Course>();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		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 (!(obj instanceof Student))
			return false;
		Student other = (Student) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

	@Override
	public int compareTo(Student o) {
		// TODO Auto-generated method stub
		return this.id.compareTo(o.id);
	}
	
}
import java.util.Comparator;

public class StudentComparator implements Comparator<Student> {

	@Override
	public int compare(Student arg0, Student arg1) {
		// TODO Auto-generated method stub
		return arg0.name.compareTo(arg1.name);
	}

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

/*
 * 1.對Integer泛型打的List進行排序
 * 2.String泛型的List進行排序
 * 3.其他泛型的List進行排序,以Student爲例
 */
public class CollecctionsTest {

	/*
	 * String泛型的List進行排序 添加三個亂序字符串,進行排序
	 */
	public void testStudentSort() {
		List<Student> stList = new ArrayList<Student>();

		Random random = new Random();
		stList.add(new Student(random.nextInt(1000) + "", "Mike"));
		stList.add(new Student(random.nextInt(1000) + "", "Angela"));
		stList.add(new Student(random.nextInt(1000) + "", "Lucy"));
		stList.add(new Student(10000 + "", "Beyonce"));
		System.out.println("~~~~~~~排序前~~~~~~");
		for (Student student : stList) {
			System.out.println("學生:" + student.id + "," + student.name);
		}
		Collections.sort(stList);
		System.out.println("~~~~~~~排序後~~~~~~");
		for (Student student : stList) {
			System.out.println("學生:" + student.id + "," + student.name);
		}
		Collections.sort(stList, new StudentComparator());
		System.out.println("~~~~~~~按照命名排序後排序後~~~~~~");
		for (Student student : stList) {
			System.out.println("學生:" + student.id + "," + student.name);
		}
	}

	public static void main(String[] args) {
		CollecctionsTest ct = new CollecctionsTest();
		// ct.testIntegerSort();
		// ct.testStringSort();
		ct.testStudentSort();
	}
}
~~~~~~~排序前~~~~~~
學生:670,Mike
學生:153,Angela
學生:674,Lucy
學生:10000,Beyonce
~~~~~~~排序後~~~~~~
學生:10000,Beyonce
學生:153,Angela
學生:670,Mike
學生:674,Lucy
~~~~~~~按照命名排序後排序後~~~~~~
學生:153,Angela
學生:10000,Beyonce
學生:674,Lucy
學生:670,Mike

在這裏插入圖片描述

在這裏插入圖片描述

測試案例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章