java集合之Set

package Andy.com.set;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;


/**
 * Set接口
 * 1、不允许有重复的元素
 * @author Administrator
 *
 */
public class SetDemo {
    
    /*
     * LinkedHashSet的实现类
     * 1、使用哈希表和双向链表实现
     * 2、会与插入的顺序输出
     * 3、底层使用LinkedHashMap实现
     * 4、是HashSet的子类
     */
    public static void linkedhashset()
    {
        Set<Student> students=new LinkedHashSet<Student>();
        Student s1=new Student("小小",20);
        Student s2=new Student("笑笑",21);
        Student s3=new Student("晓晓",22);
        students.add(s1);
        students.add(s2);
        students.add(s3);
        System.out.println(students+"\n");        
    }    
    /**
     * TreeSet实现类
     * 1、使用元素的自然顺序;
     * 2、底层使用TreeMap实现;
     * 3、在TreeSet集合中储存自定义对象时,该对象必须实现Comparable/Comparator接口,
     * 防止重复对象。
     */
    public static void treeset()
    {
        Set<String> set=new TreeSet<String>();
        set.add("浪");
        set.add("宝马");
        set.add("青");
        set.add("奥迪");
        set.add("啊");
        System.out.println("emu :"+set.size());
        String[] names=set.toArray(new String[]{});
        for(String s:names)
        {
            System.out.println(s);
        }
        /**
         * 自定义
         *
         */
        System.out.println("---------treeset自定义对象--------");
        Set<Emp> emps=new TreeSet<Emp>();
        Emp e1=new Emp("lang",20);
        Emp e2=new Emp("lan",22);
        Emp e3=new Emp("la",25);
        Emp e4=new Emp("l",23);
        emps.add(e1);
        emps.add(e2);
        emps.add(e3);
        emps.add(e4);
        System.out.println("emu:"+emps.size());    
        System.out.println(emps);
    }
    /*
     * HashSet实现类
     * 1、不保证迭代顺序
     * 2、底层使用HashMap实现,HashMap(哈希表)的初始容量是16,加载因子为0.75。
     * 加载因子:当容量使用0.75时,扩充容量
     * 3、自定义对象是否重复的判断条件:如果hashCode不同,一定不是同一个对
     * 像,如果不同不一定是同一对象,则判断equles();
     */
    public static void hashset()
    {
        Set<String> set=new HashSet<String>();
        set.add("小浪");
        set.add("小璇");
        set.add("小青");
        set.add("小鹏");
        
        System.out.println("Set contain hom meany emu:"+set.size());
        //把集合转换成数组
        //object[] objs=set.toArray();
        String[] names=set.toArray(new String[]{});
        for(String s:names)
        {
            System.out.println(s);
        }
        System.out.println("--------------hashset自定义对象--------------------");
        //
        Set<Person> persons=new HashSet<Person>();
        Person p1=new Person("小浪",24);
        Person p2=new Person("小啊",23);
        Person p3=new Person("小白",22);
        Person p4=new Person("小的",21);
        persons.add(p1);
        persons.add(p2);
        persons.add(p3);
        persons.add(p4);
        persons.add(new Person("小浪",24));
        System.out.println("contain emus:"+persons.size());    
        System.out.println(persons);
    }    
    public static void main(String[] args)
    {
        treeset();
        hashset();
        linkedhashset();
    }    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值