Java从0到1入门| 集合类

简介: Java从0到1入门| 集合类

一、字符串去重

描述

从键盘获取一串字符串,要求去除重复的字符。请使用HashSet解决这一问题

输入描述:

键盘输入的任意字符串

输出描述:

去重后的字符串(不要求顺序,预设代码中已经给出输出)

示例1

输入:

helloworld

输出:

rdewhlo

题解:

import java.util.HashSet;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        scanner.close();
        HashSet<Character> hs = new HashSet<>();
        //write your code here......
//          新建HashSet,然后遍历字符串,将所有字符添加到Set。 
//          由于HashSet本身结构不允许有重复的项,所以会自动去除重复的元素
        for(int i=0;i<str.length();i++){
            hs.add(str.charAt(i));
            //str.charAt (i)的意思是第i个字符在字符串str中所占的位置
            //不能直接使用str[i]这种方法来取字符串的值,这种取法只适合数组根据索引下标取值
        }
//         //第二种写法
//         //因为增强for循环只能够对数组进行循环,故我们应该先对str字符串进行toCharArray()将其数组化,进而取得其值
//         for(char c:str.toCharArray(){
//             hs.add(c);
//         }
        for (char c:hs) {
            System.out.print(c);
        }
    }
}

二、集合遍历

描述

请使用三种方式遍历一个list集合

输入描述:

键盘任意输入的五个int类型变量

输出描述:

使用三种不同的方法遍历集合,遍历输出时不换行,数字之间用空格隔开

示例1

输入:

1 2 3 4 5

输出:

普通for循环:1 2 3 4 5 
增强for循环:1 2 3 4 5 
迭代器遍历:1 2 3 4 5

题解:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        int num3 = scanner.nextInt();
        int num4 = scanner.nextInt();
        int num5 = scanner.nextInt();
        scanner.close();
        list.add(num1);
        list.add(num2);
        list.add(num3);
        list.add(num4);
        list.add(num5);
        System.out.print("普通for循环:");
        //write your code here......
        for(int i=0;i<list.size();i++) System.out.print(list.get(i) + " ");
        System.out.println();
        System.out.print("增强for循环:");
        //write your code here......
        for(Integer x : list) System.out.print(x + " ");
        System.out.println();
        System.out.print("迭代器遍历:");
        //write your code here......
        Iterator iterator = list.iterator();
        while(iterator.hasNext()) System.out.print(iterator.next() + " ");
        System.out.println();
    }
}

三、排队系统

描述

请设计一个排队程序,用户有普通客人和VIP客人之分,VIP客人不排队(即VIP客人在队列头部),目前队列中已有两位客人小明和小军在排队,请将VIP客人小红新增至队列头部。

输入描述:

输出描述:

预设代码中已经指定输出

题解:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Guest guest1 = new Guest("小明",false);
        Guest guest2 = new Guest("小军",false);
        Guest vipGuest = new Guest("小红",true);
        Deque<Guest> deque = new ArrayDeque<>();
        deque.add(guest1);
        deque.add(guest2);
        deque.addFirst(vipGuest);
        System.out.println(deque);
    }
}
class Guest{
    String name;
    Boolean vip;
    @Override
    public String toString() {
        return name;
    }
    public Guest(String name, Boolean vip) {
        this.name = name;
        this.vip = vip;
    }
}

四、首尾交替出队

描述

现从一队学生中抽人上台演讲,为公平起见,队头队尾交替抽取,请通过程序实现这个出队的过程。

输入描述:

一组学生的名字

输出描述:

交替打印队头队尾学生的名字

示例1

输入:

Tom Jim Lily Lucy Mary

输出:

Tom
Mary
Jim
Lucy
Lily

题解:

import java.util.ArrayDeque;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        ArrayDeque deque = new ArrayDeque();
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            // 初始化队列中的数据
            deque.offerLast(name);
        }
        // write your code here......
        int l = deque.size();
        for (int i=0; i<l; i++) {
            if (i%2==0) {
                System.out.println(deque.pollFirst());
            }
            else {
                System.out.println(deque.pollLast());
            }
        }
    }
}

五、统计一句话中重复单词的个数

描述

统计控制台输入的一句话中不同字⺟字符出现的次数。例如:现有字符串"Hello World!",上述字符串中各个字符的出现的次数为:

H:1

e:1

l:3

o:2

W:1

r:1

d:1

(不考虑数字、空格和特殊字符的个数,按照字符在字符串中出现的顺序显示。相同字母的大小写算两个不同字符)

输入描述:

控制台任意输入一段话,可以有空格和特殊符号

输出描述:

输出字符和字符对应的出现字数(字符和出现次数之间用:隔开,输出逻辑已经给出)

示例1

输入:

Hello World

输出:

H:1
e:1
l:3
o:2
W:1
r:1
d:1

题解:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        Map<Character, Integer> map = new LinkedHashMap<Character, Integer>();
 line = line.replaceAll("[^a-zA-Z]", "");
for (int i = 0; i < line.length(); i++) {
    char c = line.charAt(i);
    if (map.containsKey(c)) {
        map.put(c, map.get(c) + 1);
    } else {
        map.put(c, 1);
    }
}
        //write your code here......
        Set<Map.Entry<Character, Integer>> entrys = map.entrySet();
        for (Map.Entry<Character, Integer> entry : entrys) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

六、集合排序

描述

有三个客户对象,将三个客户对象存入集合中,并将其按照消费总额从高到低排序

输入描述:

三个整数,分别代表三个客户的消费值

输出描述:

根据消费额从高到低排序后的集合(输出部分预设代码已经给出,为保证输出格式请不要随意更改)

示例1

输入:

234 456 789

输出:

[Customer{name='小红', consumption=789}, Customer{name='小军', consumption=456}, Customer{name='小明', consumption=234}]

题解:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Customer customer1 = new Customer("小明",scanner.nextInt());
        Customer customer2 = new Customer("小军",scanner.nextInt());
        Customer customer3 = new Customer("小红",scanner.nextInt());
        List<Customer> customers = new ArrayList<>();
        customers.add(customer1);
        customers.add(customer2);
        customers.add(customer3);
        //调用排序接口
        Collections.sort(customers);
        System.out.println(customers);
    }
}
class Customer implements Comparable<Customer>{
    private String name;
    private int consumption;
    public Customer(String name, int consumption) {
        this.name = name;
        this.consumption = consumption;
    }
    @Override
    public String toString() {
        return "Customer{" +
                "name='" + name + '\'' +
                ", consumption=" + consumption +
                '}';
    }
    //重写compareTo()方法,按照消费额从高到低排序
    @Override
    public int compareTo(Customer c){
        return c.consumption-consumption;
    }
}


相关文章
|
11月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
814 0
|
12月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
774 0
|
12月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
461 100
|
11月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
461 4
|
11月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
436 5
|
11月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
261 7
|
11月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
554 5
|
11月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
502 1
|
11月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
586 1
|
11月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
382 0