Java内置类的使用

List和Map的嵌套

  • 举个Map中嵌套List的例子

    Map<Double, List<String>> height = new HashMap<>(); // 定义嵌套
    // 既然是List,那么也要做初始化,不然会有NullPointerException
    height.put(165.5, new ArrayList<>());
    height.put(170.0, new ArrayList<>());
    height.put(175.5, new ArrayList<>());
    height.put(180.0, new ArrayList<>());
    
    // 往List里面添加元素
    height.get(175.5).add("张三");
    height.get(170.0).add("李四");
    height.get(170.0).add("王五");
    height.get(165.5).add("赵六");
  • 输出

    for (Double h : height.keySet()) {
      if (height.get(h).isEmpty()) continue; // 空List就不输出了
    
      System.out.println(String.format("身高为%.1f的人有:", h));
      height.get(h).forEach(System.out::println);
    }

  • List,Set,Map等等的互相嵌套都是一个套路,定义的时候做定义嵌套,使用时注意初始化,很方便。


自定义排序

参考博客:
Collections类中排序方法

  • Collections 中有内置 sort 方法可以对List等容器进行排序。如果我想自定义排序规则呢?在C或C++中,自定义排序规则可以通过给 sort 函数传递比较函数的函数指针实现。而在Java中,自定义排序规则通过给 sort 函数传递比较类的实例来实现。

    Integer[] num = {100, 20, 10, 1, 1000, 500, 5, 600};
    List<Integer> numList = Arrays.asList(num);
    Collections.sort(numList, new MyCompare());
    numList.forEach(System.out::println);
  • 这里的 MyCompare 是一个实现了 Comparator 这个interface的类。规则是500以下的数升序排序,500及以上的数降序排序。

    class MyCompare implements Comparator<Integer> {
      @Override
      public int compare(Integer o1, Integer o2) {
          if (o1 >= 500 && o2 >= 500) {
              return o2.compareTo(o1);
          }
          return o1.compareTo(o2);
      }
    }
  • 输出


程序输入

参考博客:
java.util.Scanner应用详解

  • 从标准输入读取5个数字,排序后输出

    List<Integer> numList = new ArrayList<>();
    
    System.out.println("please input 5 numbers :");
    Scanner in = new Scanner(System.in);
    for (int n = 5; n != 0; --n) {
      numList.add(in.nextInt());
    }
    
    Collections.sort(numList);
    System.out.println("\nafter sort :");
    displayList(numList);
  • 输入和输出:

  • 如果是要从文件内读取数字,只需改动 Scanner 的初始化部分:

    List<Integer> numList = new ArrayList<>();
    
    File inFile = new File("test.txt");
    Scanner in = new Scanner(inFile);
    for (int n = 5; n != 0; --n) {
      numList.add(in.nextInt());
    }
    
    Collections.sort(numList);
    System.out.println("\nafter sort :");
    displayList(numList);
  • test.txt内容为 11 22 44 33 2,输出为:


当前目录的文件夹结构

参考博客:
Java文件操作大全
JAVA对文件和文件夹的操作

  • 函数主体

    /**
    * 递归显示文件夹结构
    *
    * @param dir    文件夹路径,如C:\Program Files
    * @param indent 控制缩进,推荐0,1或2
    */
    private static void DirStructure(String dir, int indent) {
      File fp = new File(dir);
      // 递归边界条件
      if (!fp.isDirectory()) {
          return;
      }
    
      // 获取文件和文件夹列表
      File[] elemList = fp.listFiles();
      if (elemList == null) {
          return;
      }
      for (File f : elemList) {
          // 通过indent控制缩进,输出占位符
          for (int i = 0; i < indent; ++i) {
              System.out.print((i == indent - 1) ? "└---" : "    ");
          }
    
          // 文件名
          String fileName = f.getName();
          System.out.print(fileName);
          // 文件夹结尾处加一个斜杠
          System.out.println(f.isDirectory() ? "\\" : "");
    
          // 获取绝对目录并递归
          DirStructure(f.getAbsolutePath(), indent + 1);
      }
    }
  • 调用

    String dir = "C:\\Program Files\\Windows Mail";
    System.out.println(String.format("directory of \"%s\" : ", dir));
    System.out.println("----------------------------------------");
    DirStructure(dir, 2);
  • 输出


获取当前年月日

参考博客:
Java日期时间使用总结

  • 代码,使用了 java.util.Calendarjava.util.GregorianCalendar 库。

    Calendar now = new GregorianCalendar();
    int year = now.get(Calendar.YEAR);
    int month = now.get(Calendar.MONTH);
    int day = now.get(Calendar.DAY_OF_MONTH);
    int hour = now.get(Calendar.HOUR_OF_DAY);
    int min = now.get(Calendar.MINUTE);
    int second = now.get(Calendar.SECOND);
    int millisecond = now.get(Calendar.MILLISECOND);
    String temp = "%d年%d月%d日,%d时%d分%d秒,%d毫秒";
    System.out.println(String.format(temp, year, month, day, hour, min, second, millisecond));
  • 输出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值