JavaSE-Set集合

Set集合

Set集合存放无序不可重复的元素

List集合存放有序可重复的元素

Set集合不按照特定方式进行排序,只是放元素放在集合

Set主要是由HashSetTreeSet具体实现类实现

HashSet

Hash(哈希算法)——哈希函数定义的好坏

HashCode——哈希值

  1. equals()方法判断两个元素的HashCode值是否相同
  2. 如果HashCode值相同,继续与集合的元素作比较
    1. 如果还相同,则视为同一个对象,不保存在HashSet中
    2. 如果对象不相同,理论上要存储(比较麻烦)——避免发生
  3. 如果HashCode值不相同,直接把元素存放在该元素的HashCode位置

初始化

HashSet<E> hs = new HashSet<E>();

常用方法

boolean add(E e)  #如果没有已存在,则将指定的元素添加到该集合中
boolean contains(Object o)  #如果这套 true返回包含指定的元素

TreeSet

TreeSet是一个有序集合,默认将元素按照升序排列

构造方法

TreeSet() #构造一个新的、空的树集,根据其元素的自然排序进行排序
TreeSet(Collection<? extends E> c) #构造一个新的树集包含在指定集合的元素,根据其元素的自然排序排序
TreeSet(Comparator<? super E> comparator) #构造一个新的、空的树集,根据指定的比较器进行排序

常用方法

E ceiling(E e)  #返回最小的元素在这组大于或等于给定的元素,或 null如果没有这样的元素
E first()  #返回当前在该集合中的第一个(最低的)元素
E floor(E e)  #返回最大的元素在这组小于或等于给定的元素,或 null如果没有这样的元素
E higher(E e)  #返回最小的元素在这套严格大于给定的元素,或 null如果没有这样的元素
E last()  #返回当前在该集合中的最后(最高)元素
E lower(E e)  #返回最大的元素在这套严格小于给定的元素,或 null如果没有这样的元素
E pollFirst()  #检索并移除第一(最低)的元素,或返回 null如果这集是空的
E pollLast()  #检索和删除最后(最高)的元素,或返回 null如果这集是空的

实现TreeSet(排序)

方法一:实现Comparator接口

Person类

package com.TreeSet.util;

import java.util.Comparator;
/*
 * @author Administrator
 * @version 1.0
 */
public class Person implements Comparator<Person>{
    //定义成员变量
    private int age;
    private String name;
    //无参构造方法
    public Person(){
    	
    }
    //有参构造方法
    public Person(int age, String name){
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public int compare(Person p1, Person p2){
        if (p1.age > p2.age){
            return 1;
        }
        else if (p1.age < p2.age){
            return -1;
        }
        else {
            return 0;
        }
    }
    
    @Override
    public String toString(){
        return "[" + this.age + "," + this.name + "]";
    }
}

TreeSetDemo类

package com.TreeSet.util;

import java.util.TreeSet;
/*
 * @author Administrator
 * @version 1.0
 */
public class TreeSetDemo {
	//主函数
	public static void main(String[] args) {
		//实例化TreeSet的对象
		TreeSet<Person> ts = new TreeSet<Person>(new Person());

        System.out.println(ts.add(new Person(27, "张三"))); //true
        System.out.println(ts.add(new Person(6, "吴一")));  //true
        System.out.println(ts.add(new Person(15, "刘二"))); //true
        //遍历
        for (Person person : ts){
            System.out.println(person);
        /*
         * [6,吴一]
         * [15,刘二]
         * [27,张三]
         */
        }
	}
}

方法二:指定比较器Comparator(匿名内部类)

Person类

package com.TreeSet.util;
/*
 * @author Administrator
 * @version 1.0
 */
public class Person {
    //定义成员变量
    private int age;
    private String name;
    //无参构造方法
    public Person(){

    }
    //有参构造方法
    public Person(int age, String name){
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString(){
        return "[" + this.age + "," + this.name + "]";
    }
}

TreeSetDemo类

package com.TreeSet.util;

import java.util.Comparator;
import java.util.TreeSet;
/*
 * @author Administrator
 * @version 1.0
 */
public class TreeSetDemo {
    //主函数
    public static void  main(String[] args){
        //实例化TreeSet的对象
        TreeSet<Person> ts = new TreeSet<Person>(new Comparator<Person>() {
            @Override
            //匿名内部类
            public  int compare(Person o1, Person o2) {
                if (o1.getAge() > o2.getAge()){
                    return 1;
                }
                else if (o1.getAge() < o2.getAge()){
                    return -1;
                }
                else {
                    return 0;
                }
            }
        });

        System.out.println(ts.add(new Person(15, "刘二"))); //true
        System.out.println(ts.add(new Person(27, "张三"))); //true
        System.out.println(ts.add(new Person(6, "吴一")));  //true
        //遍历
        for (Person person : ts){
            System.out.println(person);
        }
        /*
         * [6,吴一]
         * [15,刘二]
         * [27,张三]
         */
    }
}

猜你喜欢

转载自blog.csdn.net/JavaDestiny/article/details/85876345
今日推荐