美文网首页
Java基础系列32-数组、集合练习

Java基础系列32-数组、集合练习

作者: 只是甲 | 来源:发表于2021-09-15 15:06 被阅读0次

    一. 练习1 int数组去重排序

    需求:
     分析以下需求,并用代码实现:
      1. 定义一个长度为10的int数组,并存入10个int类型的数据,其中有一些数据是重复的
      2. 利用集合的知识对数组进行去重,产生新数组,不能改变数组中原来数字的大小顺序
      3. 打印新数组中的内容按照以下描述完成类的定义。
      一定要注意:不能改变数组中原来数字的大小顺序

    分析:
      只有一种元素,所以使用单例Collection即可

      Collection接口 -- List(接口,可重复,存取顺序一致) 、 Set(接口,唯一,存取顺序不一致)
        List接口 -- ArrayList(实现类,数据结构为数组)、LinkedList(实现类,数据结构为链表)
        Set接口 -- HashSet(实现类)

      因为不能改变顺序,所以不能用Set接口,所以选择ArrayList或LinkedList

    代码:

    package Java_study;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    
    /**
     * 
     * @author  只是甲
     * @date    2021-07-14
     * @remark  课后基础练习1 int数组去重排序
     *
     */
    
    public class array_lx1 {
        public static void main(String[] args) {
            //定义一个数组 其中33 22 出现过2次
            int[] arr = {33, 22, 11, 33, 15, 66, 88, 22, 10, 97};
            
            //定义一个ArrayList集合,用于存储去重后的int数组
            ArrayList<Integer> arrayList = new ArrayList<>();
            
            //遍历数组 arr.for
            for (int i : arr) {
                //如果数组中不存在该元素,则加入该集合
                if (!arrayList.contains(i)) {
                    arrayList.add(i);
                }
            }
            
            //创建新数组,长度等于集合的长度
            int[] arrSort = new int[arrayList.size()];
            
            //对新数组元素进行赋值
            for (int i = 0; i < arrayList.size(); i++) {
                arrSort[i] = arrayList.get(i);
            }
            System.out.println(Arrays.toString(arrSort));
        }
    
    }
    
    

    测试记录:

    [33, 22, 11, 15, 66, 88, 10, 97]
    

    二. 练习2 字符串去重

    需求:
    键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符

    分析:
     只有一种元素,所以使用单例Collection即可

     Collection接口 -- List(接口,可重复,存取顺序一致) 、 Set(接口,唯一,存取顺序不一致)
      List接口 -- ArrayList(实现类,数据结构为数组)、LinkedList(实现类,数据结构为链表)
      Set接口 -- HashSet(实现类)

     因为仅需要去重,不要求顺序,所以使用HashSet即可自动去重,
     需要使用String.toCharArray将字符串拆解成char类型放入数组
     注意char类型的包装类是Character

    代码:

    package Java_study;
    
    import java.util.HashSet;
    import java.util.Scanner;
    
    /**
     * 
     * @author  只是甲
     * @date    2021-07-14
     * @remark   课后基础练习2 字符串去重
     *
     */
    
    public class array_lx2 {
        public static void main(String[] args) {
            System.out.println("请输入一行字符串:");
            Scanner sc = new Scanner(System.in);
            //将输入的字符串放入chArr数组(链式编程)
            char[] chArr = sc.next().toCharArray();
            
            //创建hashSet集合对象
            HashSet<Character> hs = new HashSet<Character>();
            
            //遍历字符数组 将值插入hashSet集合
            for (int i = 0; i < chArr.length; i++) {
                hs.add(chArr[i]);
            }
            
            //输出去重后的字符
            System.out.println(hs);
        }
    
    }
    
    

    测试记录:

    请输入一行字符串:
    abdekjfiefjfowjiosjfioejfioejfie
    [a, b, s, d, e, f, w, i, j, k, o]
    

    三.练习3 生成不重复随机数字

    需求:
     产生10个1-20之间的随机数要求随机数不能重复

    分析:
     只有一种元素,所以使用单例Collection即可

     Collection接口 -- List(接口,可重复,存取顺序一致) 、 Set(接口,唯一,存取顺序不一致)
      List接口 -- ArrayList(实现类,数据结构为数组)、LinkedList(实现类,数据结构为链表)
      Set接口 -- HashSet(实现类)
     nextInt(int x)则会生成一个范围在0~x(不包含X)内的任意正整数
      生成1-20则需要 nextint(20)+1
     不能重复的数,则放入HashSet集合即可

    代码:

    package Java_study;
    
    import java.util.HashSet;
    import java.util.Random;
    
    /**
     * 
     * @author  只是甲
     * @date    2021-07-14
     * @remark   课后基础练习3 生成不重复随机数字
     *
     */
    
    public class array_lx3 {
        public static void main(String[] args) {
            HashSet<Integer> hs = new HashSet<>();
            Random r = new Random();
            
            //hs小于10个元素则一直声称随机数插入hs集合
            while (hs.size() < 10) {
                hs.add(r.nextInt(20) + 1);
            }
            
            //打印结果
            System.out.println("hs.size():" + hs.size());
            System.out.println("hs:" + hs);
        }
    
    }
    

    测试记录:

    hs.size():10
    hs:[17, 18, 20, 4, 6, 8, 9, 10, 12, 14]
    

    四. 练习4 生成不重复随机字符串

    需求:
      产生10个长度为10的不能重复的字符串(里面只能出现大写字母、小写字母、0-9的数字),并遍历打印输出

    分析:
      需要先创建一个字符库,包含所有符合规范的字符 a-z A-Z 0-9,再从这个库中随机取出10个值拼接成为字符串

    代码:

    package Java_study;
    
    import java.util.Random;
    
    /**
     * 
     * @author  只是甲
     * @date    2021-07-14
     * @remark  生成不重复随机字符串
     *
     */
    
    public class array_lx4 {
        public static void main(String[] args) {
            Random r = new Random();
            String charList = "qwertyuiopasdfghjklzxcvvbnmQWERTYUIOPASDFGHJKLZXCVVBNM1234567890";
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < 10; i++) {
                //每次从charList随机取出一个字符拼接到result字符串(随机数字大小等于字符库长度)
                result.append(charList.charAt(r.nextInt(charList.length())));
            }
            //打印结果
            System.out.println(result);
        }
    
    }
    

    测试记录:

    sqMfoFbQZz
    

    五. 练习5 统计字符出现次数

    需求:

    1. 利用键盘录入,输入一个字符串

    2. 统计该字符串中各个字符的数量(提示:字符不用排序)

    3. 如:
      用户输入字符串"If~you-want~to~change-your_fate_I_think~you~must~come-to-the-dark-horse-to-learn-java"
      程序输出结果:-(9)I(2)_(3)a(7)c(2)d(1)e(6)f(2)g(1)h(4)i(1)j(1)k(2)l(1)m(2)n(4)o(8)r(4)s(2)t(8)u(4)v(1)w(1)y(3)~(6)

      字符 --- 次数

    思路:

    1. 创建map集合,键为Character,值为Integer
    2. 键盘录入字符串 str
    3. 将字符串转换为字符数组,并遍历这个字符数组,获取每个字符
    4. 在循环中判断集合中map集合中的键是否包含这个字符,如果map集合中的键不包含这个字符,那么就让map执行put方法,键就是遍历到的字符,值为1
      如果map集合中包含这个键,就让map集合的值 + 1存储
    5. 循环完毕后,遍历map集合进行打印,打印过程中按照指定格式来进行。

    代码:

    package Java_study;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    import java.util.Set;
    
    /**
     * 
     * @author  只是甲
     * @date    2021-07-14
     * @remark  课后基础练习5 统计字符出现次数
     *
     */
    
    public class array_lx5 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            //(k,v):<字符,出现字数>
            HashMap<Character, Integer> hm = new HashMap<>();
            System.out.println("请输入一个字符串");
            String str = sc.next();
            
            char[] chs = str.toCharArray();
            
            for (char ch : chs) {
                //如果已包含这个key 则value加1后重新放入map,如果不包含,则放入该字符,并给value值为1
                hm.put(ch, hm.containsKey(ch) ? hm.get(ch) + 1 : 1);
            }
            Set<Map.Entry<Character, Integer>> esSet = hm.entrySet();
            for (Map.Entry<Character, Integer> me : esSet) {
                //HashMap存取顺序随机,不一致
                //I(2) _(3) a(7) c(2) d(1) e(6) f(2) g(1) h(4) i(1) j(1) k(2) l(1) -(9) m(2) n(4) o(8) r(4) s(2) t(8) u(4) v(1) w(1) y(3) ~(6)
                System.out.println(me.getKey() + "(" + me.getValue() + ")");
            }
        }
    
    }
    

    测试记录:

    请输入一个字符串
    wojfioejfiowefjwofjwiofajeifojwefiojcmoaj99weijowfijef123r3fwf311232445354546242343243
    a(2)
    c(1)
    e(6)
    f(11)
    i(7)
    j(10)
    m(1)
    o(9)
    1(3)
    2(6)
    r(1)
    3(8)
    4(7)
    5(3)
    6(1)
    w(8)
    9(2)
    

    六. 练习6 分割字符串并计数

    需求:

    1. 统计每个单词出现的次数
    2. 有如下字符串"If you want to change your fate I think you must come to the dark horse to learn java"(用空格间隔)
    3. 打印结果:

    分析:

    1. 分割字符串 => String.split
    2. 分割后的字符串放入String[]数组
    3. 将字符串,数量放入Map中(k,v) k=字符串 v=字符串出现次数
    4. 遍历String[]放入map,每次放入前判断是否存在该字符串
      存在则出现次数记为现有值+1
      不存在则出现次数记为1
    5. 遍历map并打印结果

    代码:

    package Java_study;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * 
     * @author  只是甲
     * @date    2021-07-14
     * @remark  课后基础练习6 分割字符串并计数
     *
     */
    
    public class array_lx6 {
        public static void main(String[] args) {
            String s = "If you want to change your fate I think you must come to the dark horse to learn java";
            String[] splitStr = s.split(" ");
            
            HashMap<String, Integer> hm = new HashMap<>();
            for (String str :  splitStr) {
                hm.put(str, hm.containsKey(str) ? hm.get(str) + 1 : 1);
            }
            
            //遍历hm集合
            Set<Map.Entry<String, Integer>> esSet = hm.entrySet();
            //将遍历结果进行拼接
            StringBuilder sb = new StringBuilder("{");
            //拼接时计数
            int count = 0;
            for (Map.Entry<String, Integer> me : esSet) {
                // 每5个元素换行一次
                if (count >= 5) {
                    sb.append("\r\n");
                    count = 0;
                }
                count++;
                //拼接当前(k,v)值
                sb.append("[" + me.getKey() + " = " + me.getValue() + "]、");
            }
            //去掉最后一个多余的顿号
            String temp = sb.substring(0, sb.length() -1).toString();
            sb.delete(0, sb.length()).append(temp).append("}");
            
            System.out.println(sb);
        }
    
    }
    

    测试记录:

    {[think = 1]、[fate = 1]、[learn = 1]、[want = 1]、[change = 1]、
    [I = 1]、[come = 1]、[your = 1]、[the = 1]、[horse = 1]、
    [java = 1]、[dark = 1]、[must = 1]、[to = 3]、[If = 1]、
    [you = 2]}
    

    参考:

    1. https://blog.csdn.net/qq_43529621/article/details/116042907

    相关文章

      网友评论

          本文标题:Java基础系列32-数组、集合练习

          本文链接:https://www.haomeiwen.com/subject/fyyeultx.html