javase:Set接口

Set接口特点及实现

1.特点:类似于数学集合,无顺序,不可重复,只有一个null值
2.实现类:①HashSet无序的,不可重复的
②LinkedHashSet保留插入顺序不可重复的
③TreeSet有序的,不可重复的,自然排序

Set接口API

Set接口API

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.Iterator;

public class SetDemo {

    public static void main(String[] args) {

        //1.创建一个Set对象
        Set set = new HashSet();

        //2.API
        //a)添加元素
        set.add("abc");
        set.add("123");
        set.add("456");
        set.add("abc");
        set.add("A");
        set.add("Ba");
        System.out.println("set:"+set);//[A, 123, abc, 456, Ba] 无序,重复项不添加
        //b)清空集合
        //set.clear();
        //System.out.println("set:"+set);//[]
        //c)判断对象是否在集合中
        boolean contatins = set.contains("A");
        System.out.println(contatins);//true
        //d)判断集合是否为空
        System.out.println("是否为空:"+set.isEmpty());//false
        //e)遍历set集合
        Iterator it = set.iterator();
        while(it.hasNext()){
            String str = (String)it.next();
            System.out.print(str+" ");
        }//A 123 abc 456 Ba
        System.out.println();
        //f)移除元素
        System.out.println(set.remove("A"));//true
        System.out.println(set);//[123, abc, 456, Ba]
        //g)
        System.out.println(set.size());//4
        //h)转换成数组
        Object[] objs = set.toArray();
        System.out.println("对象内容为:"+ Arrays.toString(objs));//对象内容为:[123, abc, 456, Ba]
        //i)遍历过程中不能执行删除操作
        /*Iterator it1 = set.iterator();
        while(it.hasNext()){
            String str = (String)it.next();
            //if (str.equals("123")) {set.remove(str); } 报错
            System.out.print(str+" ");
        }//A 123 abc 456 Ba
        System.out.println();
        */
    }

}

HashSet特点及API

1.特点
①采用hash算法的Set,相当于HashMap的key
②默认容量16,加载因子是75%
③HashSet非线程安全的
④内部原理:HashMap的key
⑤在集合遍历过程中不能使用HashSet本身的方法删除或者添加元素,可以
使用迭代器的方法完成删除
2.API
HashSet的API与Set的API基本相同,都可以使用

LinkedHashSet特点

1.HashSet的子类
2.不可重复的
3.插入顺序有序的

LinkedHashSet实例

/*
    从控制台输入一个字符串,统计每个字符串出现的次数,并且按照指定顺序输出结果
 */

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;

public class MapCount {

    public static void main(String[] args) {
        //1.定义字符串
        String str = "sadas7dal4k89jsad1fig44as5as95jklewj6o";
        //2.将字符串转换成char数组
        char[] buf = str.toCharArray();
        //3.创建一个Map集合保存字符和对应的次数
        TreeMap map = new TreeMap();
        //4.遍历数组
        for(char c : buf){
            //5.判断Map集合中是否存在char,如存在在key对应的value上加一,如果不存在就保存
            if(map.containsKey(c)){
                int count = (int)map.get(c);
                map.put(c,count+1);
            }else{
                map.put(c,1);
            }
        }
        //System.out.println(map);//{1=1, 4=3, 5=2, 6=1, 7=1, 8=1, 9=2, a=6, d=3, e=1, f=1, g=1, i=1, j=3, k=2, l=2, o=1, s=5, w=1}

        //6.遍历集合
        Set entrySet = map.entrySet();
        for(Object object : entrySet ){
            Entry entry = (Entry)object;
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
    }

}

TreeSet特点及API

1.默认容量为0
2.采用二叉树的算法
3.原理:TreeMap的key
4.在集合遍历过程中不能使用TreeSet本身的方法删除或者添加元素,可以使用迭代器的方法完成删除
5.按照自然排序存放内容。(升序)(按哈希码排序)

Demo1

import java.util.HashSet;
import java.util.TreeSet;

public class TreeMapDemo {

    public static void main(String[] args) {
        //1.创建一个对象
        TreeSet tree = new TreeSet();
        //2.添加元素
        tree.add("abc");
        tree.add("123");
        tree.add("456");
        tree.add("abc");
        tree.add("A");
        tree.add("Ba");
        System.out.println(tree);//[123, 456, A, Ba, abc]
        //3.将其他集合传化为TreeSet
        HashSet hashSet = new HashSet();
        hashSet.add(7);
        hashSet.add(4);
        hashSet.add(452);
        hashSet.add(42);
        hashSet.add(8);
        hashSet.add(24);
        System.out.println(hashSet);
        TreeSet tree1 = new TreeSet(hashSet);//[4, 452, 7, 8, 24, 42]
        System.out.println((tree1));//[4, 7, 8, 24, 42, 452]
        //4.获取元素
        //a)获取第一个元素
        System.out.println("第一个元素:"+tree1.first());//第一个元素:4
        //b)获取最后一个元素
        System.out.println("最后一个元素:"+tree1.last());//最后一个元素:452

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值