Set知识点汇集

Set知识点汇集

1、Set特点:①无序,意味着无下标。
②对象不可重复(equals)
注:①equals从Object继承,默认比较的是地址。
②如果放入重复值,将被过滤,而不是被覆盖
2、循环遍历方式:①foreach

//forEach循环遍历取值
public class Demo{
  public static void main(String[] args){
    Set set=new HashSet<>();
    set.add("zs");
    set.add("ls");
    set.add("ww");
    set.add("zl");
    for(Object object:set){
       System.out.println(object);
    }
  }
}

②迭代器

//迭代器
public class Demo(){
  public static void main(String[] args){
    Set set=new HashSet<>();
	set.add("zs");
	set.add("ls");
	set.add("ww");
	set.add("zl");
    Iterator<Student> it=set.iterator();
    while(it.hasNext()){
      Object next=it.next();
      System.out.println(next);
    }
  }
}

3、常用实现类:
①HashSet

public class Demo{
  public static void main(String[] args){
    Set<Student> set=new HashSet<>();
    set.add(new Student(1,"张三","男"));
    set.add(new Student(2,"李四","女"));
  }
}

②TreeSet
三种比较规则
1)让元素具备比较性
元素自身具备比较性,需要元素实现Comparable接口,重写compareTo方法,也就是让元素自身具备比较性,这种方式叫做元素的自然排序也就做默认排序

// 第一种比较方法
public class Student implements Comparable<Student> {
//public class Student{
    
    private String name;
    private int age;
    @Override
    public int compareTo(Object o) {
                if(!(o instanceof Student))
                        throw new RuntimeException("不是学生对象");
                Student s = (Student) o;
                int differenceValue = this.age - s.age;
                if(differenceValue == 0) return this.name.compareTo(s.name);
        return differenceValue;
    }   
}

2)写一个类来实现Comparator接口
当元素自身不具备比较性,或者自身具备的比较性不是所需要的。那么此时可以让容器自身具备。需要定义一个类实现接口Comparator,重写compare方法,并将该接口的子类实例对象作为参数传递给TreeMap集合的构造方法。
注意:当Comparable比较方式和Comparator比较方式同时存在时,以Comparator的比较方式为主;在重写compareTo或者compare方法时,必须要明确比较的主要条件相等时要比较次要条件,

import java.util.Comparator;
// 第二种比较方法
public class ComparatorLean implements Comparator<Student> {
    @Override
    public int compare(Object o1, Object o2) {
                Student s1 = (Student) o1;
                Student s2 = (Student) o2;
                int differenceValue = this.age - s.age;
                if(differenceValue == 0) return new Integer(s1.getName().compareTo(s2.getName()));
        return differenceValue;
    }
}
TreeSet<Student> treeSet = new TreeSet<>(new ComparatorLean());

3、第三种为匿名内部类方法‘

TreeSet<Student> treeSet = new TreeSet<Student>(new Comparator<Object>() {
    @Override
    public int compare(Object o1, Object o2) {
        Student s1 = (Student) o1;
        Student s2 = (Student) o2;
        int num = s1.getAge() - s2.getAge();
        if(num==0) return s1.getAge() - s2.getAge();
        return num;
    }
});

③LinkedListHashSet

public class Demo04 {
    public static void main(String[] args) {
        LinkedHashSet<String>set=new LinkedHashSet<String>();
        set.add("hello");
        set.add("java");
        set.add("nihao");
        for(String s:set){
            System.out.println(s);
        }
    }
}

特点:
1)元素是有顺序的
2)元素是不重复的
3)底层数据结构是按照链表的结构存贮的Linked

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值