关于集合的习题(1)

编写程序,获取命令行参数中的字符串列表,输出其中重复的字符、不重复的字符以及消除重复以后的字符列表。
习题解读:就是用syso语句输出字符串中重复的字符、不重复的字符和消除重复后的字符串。
字符串中重复的字符可以组合成一个新的字符串、不重复的字符也可以组合成新的字符串、字符串消除字符串中重复的字符串后也可以组合成一个新的字符串。
解题思路:1、先写出一个字符串,要求其中有重复出现的字符,和不会重复的字符。
2、因为要统计字符,对于字符的操作需要用到char,所以需要把字符串转为字符数组。
3、由set接口的特性:无序不可重复,可得消除重复后的字符串。
4、由hashset.add()方法的特性,返回一个布尔值,如果添加成功返回true,失败则返回false。由于字符串中有重复出现过的字符,故该字符在出现的第一次就被set.add添加进set集合中了,当这个字符再次出现的时候,set.add方法就会返回一个false值。可以用if语句捕获这个false值,当该添加方法返回false值的时候,将这个令添加方法返回false值的字符添加到收集重复字符的集合中。
5、hashset中有一个removeall的方法,可以删除掉集合中的一个collection集合。
6“、hashset中有一个addall的方法,可以向集合中添加一个collection集合。

package test;

import java.util.HashSet;
import java.util.Set;

public class Lianxi02 {

    public static void main(String[] args) {
        String str = "abcdeafblmbnopawc";
        System.out.println("原字符串:"+str);


        Set<Character> set1 = new HashSet<Character>();//消除重复后的字符
        Set<Character> set2 = new HashSet<Character>();//重复的字符
        Set<Character> set3 = new HashSet<Character>();//不重复的字符

        //把字符串转为字符数组
        char[] cs = str.toCharArray();
        for (char c : cs) {
            boolean b = set1.add(c);
            if(!b){
                set2.add(c);
            }
        }

        //把消除重复后的字符赋给set3,为什么不是set3=set1,因为这个式子是将set1的地址传给set3,如果set3被改变,set1也会被改变。
        set3.addAll(set1);
        //把消除重复后的字符 - 重复的字符 = 不重复的字符
        set3.removeAll(set2);

        System.out.println("====消除重复后的字符========");
        for (char c : set1) {
            System.out.print(c+" ");
        }

        System.out.println("\n====重复的字符========");
        for (char c : set2) {
            System.out.print(c+" ");
        }

        System.out.println("\n====不重复的字符========");
        for (char c : set3) {
            System.out.print(c+" ");
        }


    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值