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

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
 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值