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