欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Set接口常用方法的简单应用

程序员文章站 2022-06-13 18:08:29
...

1、Set接口特点:不包含重复元素,无序且唯一。

2、常用方法如下:

 

boolean  add (E  e ) 如果set中尚未包含指定元素,则添加指定元素。
void clear ()   从此set中移除所有的元素。
boolean contains( Object o) 如果此 set包含指定元素 ,则返回true。
boolean remove( Object o)  如果指定元素存在于此set中,则将其移除。
int size() 返回此set中的元素的数量(set的容量)。

3、如何遍历Set集合呢?

(1)、通过迭代器Iterator实现遍历  

         Iterator的方法:

                     boolean hasNext() : 判断是否存在下一个可访问的元素。

                     Object next()      : 返回要访问的下一个元素

(2)、增强for循环遍历

 

4、List中在遍历集合的时候还有一个通过下下标来访问元素,为什么Set不可以通过下标访问呢?

Set接口:元素无放入顺序,元素不可重复。List的get方法需要下标,其实也就是放入顺序,由于Set没有放入顺序,所以它不能通过下标的方式访问。

 

5、针对Set的常用方法的一个简单应用:

(1)、学生类 (只有一个属性,存储学生的姓名)

package day13;
/**
 * 学生类,存储学生的姓名
 */
public class Student1{
	private String name;
	
	public Student1() {
		super();
	}
	public Student1(String name) {
		super();
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + "]";
	}
	
}

2、StudentService类,包含了4个方法,分别用于新增学生、获取学生总数、打印所有学生姓名、删除某个学生。

package day13;

import java.util.Iterator;
import java.util.Set;

public class StudentService1{
	
	/**
	 * 新增学生
	 * @param set
	 * @param student
	 */
	public void add(Set<Student1>set,Student1 student) {
		set.add(student);
		System.out.println("新增成功!");
	}
	
	
	/**
	 * 获取学生总数
	 * @param set
	 * @return
	 */
	public int getToal(Set<Student1>set) {
		return set.size();
	}
	
	
	/**
	 * 打印所有学生姓名
	 * @param set
	 */
	public void printName(Set<Student1>set) {
		System.out.println("-------------打印所有学生名字-----------------\n");
		
		//方法一:增强for循环方法遍历
		System.out.println("----方法一:增强for循环方法遍历----:");
		for(Student1 stu:set) {
			if(stu==null) {
				continue;
			}
			System.out.println(stu.getName());
		}
		
		
		//方法二:迭代器遍历
		System.out.println("------方法二:迭代器遍历-------:");
		Iterator<Student1> iter = set.iterator();
		Student1 stu = null;
		while(iter.hasNext()) {
			stu = iter.next();
			if(stu == null) {
				continue;
			}
			System.out.println(stu.getName());
		}
		
		//普通方法增加学生             //set不能用下标访问!会出错
		
		for(int i =0 ;i<set.size();i++) {
		}			
	}
	
	/**
	 * 删除一个学生
	 * @param set
	 * @param studnet
	 * @param str
	 */
	public void delete(Set<Student1>set,String str) {
		
		Iterator<Student1> iter = set.iterator();
		Student1 student = null;
		while(iter.hasNext()) {
			student = iter.next();
			if(student.getName().equals(str)) {
				iter.remove();
				continue;
			}
			System.out.println("删除的学生姓名是:"+student.getName());
		}
	}
}

3、测试类,主要是为了对set常用方法的一个简单的应用。

package day13;

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

public class Test_set {

	public static void main(String[] args) {
		
		Set<Student1>set = new HashSet<Student1>();
		
		StudentService1 service = new StudentService1();
		
		Student1 student1 = new Student1("大美");
		Student1 student2 = new Student1("图图");
		
		//利用set的add方法添加一个学生
		set.add(student1);
		set.add(student1);         //添加了两个student1,发现结果中只有一个student1,(Set不允许重复)
				 
		set.add(new Student1("李华"));	
		
		//调用StudentService1的add方法添加一个学生
		service.add(set, student2);
		
		System.out.println("当前学生总数为:"+set.size());
		System.out.println("当前学生总数为:"+service.getToal(set));
		
		//调用StudentService1的printName方法打印所有学生的姓名
		service.printName(set);
		
		System.out.println("当前学生中是否包含'小美'?"+set.contains("小美"));
		System.out.println("当前学生中是否包含'李华'?"+set.contains(student1));
		
		//删除student1
		set.remove(student1);
		System.out.print("删除一个学生(大美),");
		System.out.println("当前学生总数为:"+service.getToal(set));
		
		//调用StudentService1的delete方法删除某个学生
		service.delete(set,"李华");
		
		service.printName(set);
		
		//清空列表
		set.clear();
		System.out.println("当前学生总数为:"+set.size());
		
	}
}

运行结果如下:

新增成功!
当前学生总数为:3
当前学生总数为:3
-------------打印所有学生名字-----------------

----方法一:增强for循环方法遍历----:
大美
图图
李华
------方法二:迭代器遍历-------:
大美
图图
李华
当前学生中是否包含'小美'?false
当前学生中是否包含'李华'?true
删除一个学生(大美),当前学生总数为:2
删除的学生姓名是:图图
-------------打印所有学生名字-----------------

----方法一:增强for循环方法遍历----:
图图
------方法二:迭代器遍历-------:
图图
当前学生总数为:0