java中集合的结构Set类型
collection ?集合
Collection接口 是List Set和Queue接口的父接口 定義了可用于操作List,Set和Queue的方法---增刪改查
Set ?HashSet
Set接口及其實現(xiàn)類---HashSet ?Set是元素?zé)o序并且不可以重復(fù)的集合,被稱為集
HashSet---哈希集,是Set的一個重要實現(xiàn)類
List--->元素有序,可以重復(fù) ?Set--->元素?zé)o序,不可以重復(fù)
set循環(huán)用foreach,iterator ? list集合用get()方法
課程類Course如下所示:
/**
* 課程類
*/
public class Course
{
?? ?public String id;
?? ?public String name;
?? ?public Course(String id,String name){
?? ? ?this.id ? = id;
?? ? ?this.name = name;
?? ?}
?? ?//添加一個無參構(gòu)造器
?? ?public Course() {
?? ?
?? ?}
?? ?//重新equals函數(shù),這個寫了一部分不再寫了
?? ?/*@Override
?? ?public boolean equals(Object obj) {
?? ? ? if(this == obj) {
?? ? ? ? ?return true;
?? ? ? }
?? ? ? if(obj == null)?
?? ??? ? ? return false;
?? ? ? return true;
?? ?}
? ? */
}
學(xué)生類Student如下所示:
import java.util.Set;
import java.util.HashSet;
/**
* 學(xué)生類
*/
//public class Student
public class Student implements Comparable<Student> {
?? ?public String id;
?? ?public String name;
?? ?//public Set courses;//課程信息的屬性,以前這樣的實例
?? ?public Set<Course>courses;//課程信息的屬性
?? ?public Student(String id,String name){ //構(gòu)造器
?? ? ?this.id ? = id;
?? ? ?this.name = name;
?? ? ?//this.courses = new HashSet();//以前這樣寫
?? ? ?this.courses = new HashSet<Course>();
?? ?}//Student end
?? ?@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) {
?? ? ? return this.id.compareTo(o.id);
?? ?}//compareTo end
}//Student end
Set的測試類SetTest如下所示:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class SetTest
{
?? ?public List<Course> coursesToSelect;
?? ?private Scanner console;
?? ?public Student student;
?? ?public SetTest() {
?? ? ?coursesToSelect = new ArrayList<Course>();
?? ? ?console = new Scanner(System.in);
?? ?}//SetTest end
? ? public void testAdd() {
?? ? ?Course cr2 = new Course("2","C語言");
?? ? ?coursesToSelect.add(0,cr2);
?? ? ?Course temp2 = (Course)coursesToSelect.get(0);
?? ? ?//System.out.println("添加了課程:"+temp2.id+":"+temp2.name);
?? ?}
?? ?/*
?? ? * 通過for each方法訪問集合元素
?? ? * @param args
?? ?*/
?? ?public void testForEach() {
?? ? ? System.out.println("有如下課程待選(通過for each訪問):");
?? ? ? for(Object obj:coursesToSelect) {
?? ? ? ? ?Course cr = (Course)obj;
?? ??? ? ?System.out.println("課程:"+cr.id+":"+cr.name);
?? ? ? }
?? ?}
? ?/*
?? ? * 測試List的contains方法
?? ?*/
?? ?public void testListContains() {
?? ? ? //取得備選課程序列的第0個元素
?? ? ? Course course = coursesToSelect.get(0);
?? ? ? //打印輸出coursesToSelected是否包含course對象
? ? ? ?System.out.println("取得課程:"+course.name);
?? ? ? System.out.println("備選課程中是否包含課程:"+course.name+","+coursesToSelect.contains(course));
?? ? ? //提示輸入課程名稱
? ? ? ?System.out.println("請輸入課程名稱:");
?? ? ? String name= console.next();
?? ? ? //創(chuàng)建一個新的課程對象,ID和名稱,與course對象完全一樣
? ? ? ?//Course course2 = new Course(course.id,course.name);
?? ? ? Course course2 = new Course();
?? ? ? course2.name = name;
?? ? ? System.out.println("新創(chuàng)建課程:"+course2.name);
?? ? ? System.out.println("備選課程中是否包含課程:"+course2.name+","+coursesToSelect.contains(course2));
?? ?}
?? ? //創(chuàng)建學(xué)生對象并選課
?? ? public void createStudentAndSelectCours() {
?? ? ? ?//創(chuàng)建一個學(xué)生對象
?? ??? ?student = new Student("1","小明");
? ? ? ? System.out.println("歡迎學(xué)生:"+student.name+"選課!");
?? ??? ?//創(chuàng)建一個scanner對象,用來接收從鍵盤輸入的課程ID
?? ? ? ?Scanner console = new Scanner(System.in);
?? ??? ?for(int i=0;i<3;i++) {
?? ??? ? ? System.out.println("請輸入課程ID");
?? ??? ? ? String courseId = console.next();
?? ??? ? ? for(Course cr:coursesToSelect) {
?? ??? ? ? ? ?if(cr.id.equals(courseId)) {
?? ??? ??? ? ? ?student.courses.add(cr);
?? ??? ??? ??? ?/**
?? ??? ??? ??? ? set中,添加某個對象,無論添加多少次
?? ??? ??? ??? ? 最終只會保留一個該對象(的引用)
?? ??? ??? ??? ? 并且,保留的是第一次添加的那一個
?? ??? ??? ??? ?**/
?? ??? ??? ??? ?//student.courses.add(null);
?? ??? ??? ??? ?//student.courses.add(cr);
?? ??? ??? ? ?}//if end
?? ??? ? ? }//for end
?? ??? ?}//最外層for end
?? ? }//createStudentAndSelectCours end
?? ?/*
?? ? * 測試Set的contains方法
?? ?*/
?? ?public void testSetContains() {
?? ? ? //提示輸入課程名稱
?? ? ? System.out.println("請輸入學(xué)生已選的課程名稱");
?? ? ? String name=console.next();
?? ? ? //創(chuàng)建一個新的課程對象,ID和名稱,與course對象完全一樣
?? ? ? Course course2 = new Course();
? ? ? ?course2.name = name;
? ? ? ?System.out.println("新創(chuàng)建課程:"+course2.name);
?? ? ? System.out.println("備選課程中是否包含課程:"+course2.name+","+student.courses.contains(course2));
?? ? ? //通過indexOf方法來取得某元素的索引位置
?? ? ? if(coursesToSelect.contains(course2)) {
?? ? ? ? ? System.out.println("課程:"+course2.name+"的索引位置為:"+coursesToSelect.indexOf(course2));
?? ? ? }
?? ?}//testSetContains end
?? ?public static void main(String[] args) {
?? ? ? //System.out.println("nihaoya");?
?? ? ? SetTest st = new SetTest();
?? ? ? st.testAdd();
?? ? ?// st.testListContains();
?? ? ?// st.testForEach();
?? ? ?// st.createStudentAndSelectCours();
?? ? ?// st.testSetContains();
?? ? ? st.testListContains();
?? ? ? st.testForEach();
?? ? ??
?? ? ? /*
?? ? ? ?res:
?? ??? ?D:\javacode\code>java SetTest
? ? ? ? 取得課程:C語言
?? ??? ?備選課程中是否包含課程:C語言,true
?? ??? ?新創(chuàng)建課程:C語言
?? ??? ?備選課程中是否包含課程:C語言,false
?? ? ? */
?? ? ? /*st.testForEach();
?? ? ? //創(chuàng)建一個學(xué)生對象
?? ? ? Student ?student = new Student("1","小明");
? ? ? ?System.out.println("歡迎學(xué)生:"+student.name+"選課!");
?? ? ? //創(chuàng)建一個Scanner對象,用來接收從鍵盤輸入的課程ID
?? ? ? Scanner console = new Scanner(System.in);
?? ? ? for(int i=0;i<3;i++) {
?? ? ? ? System.out.println("請輸入課程ID");
?? ??? ? String courseId = console.next();
?? ??? ? for(Course cr:st.coursesToSelect){
?? ??? ? ? ?if(cr.id.equals(courseId)) {
?? ??? ??? ? ?student.courses.add(cr);*/
?? ??? ??? ? ?/**
?? ??? ??? ? ? * ?set中,添加某個對象,無論添加多少次
?? ??? ??? ? ? * ?最終只會保留一個該對象(的引用)
?? ??? ??? ? ? * ?并且,保留的是第一次添加的那一個
?? ??? ??? ? ?*/
?? ??? ??? ? ?//student.courses.add(cr);
?? ??? ??? ? ?//student.courses.add(null);
?? ??? ??? ?/*}//if end
?? ??? ? }//里層的for
?? ? ? }//最外層的for
?? ? ? st.testForEachForSet(student);*/
?? ?}//main end
?? ?public void testForEachForSet(Student student) {
?? ? ? //打印輸出,學(xué)生所選的課程!
?? ? ? System.out.println("共選擇了:"+student.courses.size()+"門課程!");
?? ? ? for(Course cr:student.courses) {
?? ? ? ? System.out.println("選擇了課程:"+cr.id+":"+cr.name);
?? ? ? }
?? ?}
}
總結(jié)
以上是生活随笔為你收集整理的java中集合的结构Set类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中集合的结构list类型
- 下一篇: 超频三散热器怎么样 有名的散热领域品牌