Java入门9(HashSet,File文件类)

这篇具有很好参考价值的文章主要介绍了Java入门9(HashSet,File文件类)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HashSet

  1. jdk1.7之前,使用数组加链表的方式实现
  2. jdk1.8之后,在链表长度大于8并且数组长度超过32的情况下,会转成红黑树结构
  3. HashSet的本质是一个HashMap,它所有的value都是一致的,传入的参数作为key,因此HashSet中不允许重复数据
  4. 存储的时候,键值对位于的数组位置,之和key的HashCode值有关,无法保证先插入的key的HashCode值一定比较小,因此无法保证存读有序
Set<String> set = new HashSet<>();
set.add("Robot01");
set.add("Robot02");
set.add("Robot03");
// 1. 增强for循环遍历
for (String s : set) {
    System.out.println(s + "\t");
}
System.out.println();
// 2. 迭代器遍历
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
    System.out.println(iterator.next() + "\t");
}

二叉树

SVVQ$IY~6EGXO9BSC1GB

二叉树的节点类

@Data
@AllArgsConstructor
@NoArgsConstructor
// 泛型继承,你提供的泛型类型一定是Comparable类的子类
public class Node<V extends Comparable> {
    private V value;
    private Node<V> leftNode;
    private Node<V> rightNode;
    public void addNode(V value){
        if (null == this.value){
            // 当前节点没有值
            this.value = value;
        }else{
            // 当前节点有值
            if(this.value.compareTo(value)>=0){
                // 当前值小于节点值
                // 判断当前节点的左节点是否为空
                if(null == leftNode){
                    // 左节点为空,新建新节点
                    leftNode = new Node<>();
                }
                // 递归调用
                leftNode.addNode(value);
            } else {
                // 当前值大于节点值
                // 判断当前节点的右节点是否为空
                if (null == rightNode){
                    // 右节点为空,新建新节点
                    rightNode = new Node<>();
                }
                rightNode.addNode(value);
            }
        }
    }
}

// 测试类
public class Application {
    public static void main(String[] args) {
        int[] randoms = {17,34,64,72,37,18,98,37,53,63};
        // 创建根节点
        Node<Integer> root = new Node<>();
        for (int random : randoms) {
            root.addNode(random);
        }
        System.out.println(root.getRightNode().getValue());
    }
}

三种遍历方法(前序遍历,中序遍历,后序遍历)

​ 以中序遍历为例

// 中序遍历
public List<V> inOrder(Node<V> root){
    List<V> nodeList = new ArrayList<>();
    if(null == root.value){
        return nodeList;
    }else{
        if (null != root.leftNode){
            nodeList.addAll(inOrder(root.leftNode));
        }
        nodeList.add(root.value);
        if (null != root.rightNode){
            nodeList.addAll(inOrder(root.rightNode));
        }
        return nodeList;
    }
}

TreeMap和TreeSet

  1. TreeMap中,所有的key是以红黑树进行存储的
  2. 在使用TreeMap的时候,如果你key的类型实现了比较器接口,就可以自动排序
  3. TreeSet和TreeMap方法几乎一致,只不过不再提供value的获取,所有方法获取的都是key
  4. 两者相同,要么泛型对应的数据类型实现了Comparable接口,要么手动提供一个Comparator比较器对象,否则两者都不可以被实例化(类似于强制排序)
public static void main(String[] args) {
    TreeMap<String, String> treeMap = new TreeMap<>();
    // 根据key的compareTo比较器确定的排序方法
    for (int i = 0; i < 5; i++) {
        treeMap.put("robot0" + i,"i");
    }
    // 返回第一个key(hashcode最小)
    System.out.println(treeMap.firstKey());
    // 返回第一个键值对(hashcode最小)
    System.out.println(treeMap.firstEntry());
    // 返回最后一个键值对(hashcode最大)
    System.out.println(treeMap.lastEntry());
    // 返回最后一个键值对(hashcode最大)
    System.out.println(treeMap.lastKey());
    // 如果匹配的key存在,默认取匹配key
    System.out.println(treeMap.floorKey("robot01"));
    // 如果匹配key存在,则取上一个key
    System.out.println(treeMap.lowerKey("robot01"));
    // 还有很多基于key的排序衍生出来的方法。。。。
}

日期类(Calendar类)

// Calendar 日历类,对日期时间做修改和调整(单例模式)
// add 基于时间单位做日期的前后调整
// set 基于时间单位做日期值的设置
Calendar c = Calendar.getInstance();

// 创建日期对象时,如果没有指定时间,默认使用当前时间
Date now = c.getTime();
System.out.println(c.getTime());

// 获得下个月的今天
// 参数值如果时正数,表示未来,如果为负数,表示过去
c.add(Calendar.MONTH,1);
System.out.println(c.getTime());

// 重置日历时间
c.setTime(now);

// 获取上个月的第三天
c.add(Calendar.MONTH,-1);

// 如果set的是月份那么使用(0~11)来表示1~12月
c.set(Calendar.DATE,3);
System.out.println(c.getTime());

文件类(File类)

​ Java中借助文件类的对象,来操作和访问磁盘中的真实文件,文件对象只是真实文件的映射,并不代表文件本身,文件是否存在并不影响对象的创建。

文件对象的三种创建方式

  1. 基于文件再磁盘中的绝对路径来进行创建
File f1 = new File("文件路径")
  1. 基于当前项目所在位置路径进行创建
File f1 = new File("文件名")
  1. 基于另一个目录对象作为父目录,创建文件对象
File f1 = new File(f1,"文件名")

返回文件绝对路径文章来源地址https://www.toymoban.com/news/detail-454542.html

System.out.println(f1.getAbsolutePath());

文件类常用方法

1. 判断文件是否存在

System.out.println(f1.exists());

2.判断是否是文件夹

System.out.println(f1.isDirectory());

3.判断是否是文件

System.out.println(f1.isFile());

4.获取文件长度

System.out.println(f2.length());

5.文件最后修改时间

System.out.println(f2.lastModified());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
// 日期转字符串
System.out.println(dateFormat.format(f2.lastModified()));
// 字符串转日期,必须保证字符串日期格式与定义的format格式一致,且必须进行异常处理
String str = "2023-05-20 13:59:47 871";
try {
    System.out.println(dateFormat.parse("2023-05-20 13:59:47 871"));
} catch (ParseException e) {
    e.printStackTrace();
}System.out.println(f2.lastModified());

6.设置文件最后修改时间

String str = "2023-05-20 13:59:47 871";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
try {
    Date d = dateFormat.parse("2023-05-20 13:59:47 871");
    file02.setLastModified(d.getTime());
} catch (ParseException e) {
    e.printStackTrace();
}

7.设置文件只读

file02.setReadOnly();

8. 重命名文件

// 文件重命名,需要提供新的文件对象
File file03 = new File(file01,"HAHAHAHAHA.txt");
file02.renameTo(file03);

9. 以字符串数组的形式返回当前目录下所有文件的文件名称

// 以字符串数组的形式返回当前目录下所有文件的文件名称
String[] fileList = file01.list();
System.out.println(Arrays.asList(fileList));

10. 以文件对象数组的方式,返回当前目录下所有文件所对应的文件对象

// 以文件对象数组的方式,返回当前目录下所有文件所对应的文件对象
File[] files = file01.listFiles();
for (File file : files) {
    System.out.println(file);
}

11.获取当前文件对象父目录的路径

// 获取当前文件对象父目录的路径
System.out.println(file02.getParent());
// 获取当前文件对象父目录所对应的文件对象
File parentFile = file02.getParentFile();
System.out.println(parentFile.getAbsoluteFile());

12.创建文件对象路径所对应的目录

// 创建文件对象路径所对应的目录
File file = new File("绝对路径");
file.mkdirs();

13.创建文件对象的路径所对应的文件

// 创建文件对象的路径所对应的文件
File file = new File("绝对路径");
// 再创建文件之前,应该先判断文件的父目录是否存在
// 如果存在,则直接创建,如果不存在则应该先创建父目录
if (!file.getParentFile().exists()){
    file.getParentFile().mkdirs();
}
try {
    file.createNewFile();
} catch (IOException e) {
    throw new RuntimeException(e);
}

14.删除文件

// 删除文件
file02.delete();
// 退出的时候再删除(用于临时文件)
file02.deleteOnExit();

到了这里,关于Java入门9(HashSet,File文件类)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CentOS配置Java环境报错-bash: /usr/local/jdk1.8.0_381/bin/java: 无法执行二进制文件

    CentOS配置Java环境后执行java -version时报错: 原因是所使用的jdk的版本和Linux内核架构匹配不上 使用以下命令查看Linux架构: 可以看到是x86_64架构。 而我使用的jdk是 arm64架构下的。 因此需要首先搞清楚是x86_64架构还是arm64架构还是其他的什么架构 在这里下载对应的JDK版本 更换

    2024年02月09日
    浏览(55)
  • Java——JDK1.8新特性

    目录 一、Lambda 表达式 (一)Lambda 表达式语法 (二)类型推断 二、函数式接口 (一)自定义函数式接口 (二)作为参数传递Lambda 表达式 (三)Java 内置四大核心函数式接口 三、方法引用 四、Stream API (一)什么是Stream? (二)Stream 的操作三个步骤 (三)创建流的四种方

    2024年02月07日
    浏览(85)
  • Java中jdk1.8和jdk17相互切换

    之前做Java项目时一直用的是jdk1.8,现在想下载另一个jdk版本17,并且在之后的使用中可以进行相互切换,我将jdk切换时所遇到的问题记录下来并分享出来供大家参考。 环境变量配置如下: 步骤1 步骤2 (注:@MAVEN_HOME%bin;是配置maven时的环境变量,如果没有安装maven就不用管)

    2024年02月03日
    浏览(62)
  • java jdk1.8下载与安装

    官网下载地址:Java Downloads | Oracle 打开官网链接,下滑至Java 8模块,选取自己电脑适合的版本点击下载 1.找到我们下载的安装包,双击运行 2.点击下一步 3.点击更改,修改安装目录   4.选择合适的安装位置,点击确定   5.点击下一步   6.弹出jre的安装选项,点击更改,修改

    2024年02月08日
    浏览(51)
  • [Java]静态代理、动态代理(基于JDK1.8)

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18002823 出自【进步*于辰的博客】 参考笔记一,P83;笔记二,P75.4。 目录 1、概述 2、静态代理的两种形式 2.1 面向接口 2.2 面向继承 3、动态代理的两种形式 3.1 JDK动态代理

    2024年03月09日
    浏览(37)
  • java jdk1.8.0_221 安装步骤

    一、下载jdk Oracle JDK下载官网https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载jdk1.8.0_221. 需要注册账号登陆才能下载。 下载完成,双击jdk-8u221-windows-x64.exe,进行安装。 二、安装jdk 安装前准备工作,D盘新建文件夹JAVA,在JAVA文件夹中新建两个文件夹:jdk和

    2024年02月06日
    浏览(56)
  • 【Java基础】JDK8.0(JDK1.8)版本的下载与安装

    JDK(Java SE Development Kits)是Java程序员使用的开发环境,包含JRE和开发工具集。 JRE(Java Runtime Environment) :是Java程序的运行时环境,包含JVM和运行时所需要的核心类库。 官网地址:https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html 链接:https://pan.baidu.com/

    2024年02月13日
    浏览(66)
  • Windows11配置Java8开发环境 - JDK1.8

    1、下载JDK 我们要下载的是Oracle版本的JDK,我们首先进入Oracle的官网的Java下载页面:https://www.oracle.com/cn/java/technologies/downloads/ 一直往下滑 ,找到 Java8 —点击 Windows (如果你是其他系统选择你对应的系统即可)— 在下方根据你的电脑系统类型选择对应的X86或X64然后点击下载

    2024年02月10日
    浏览(47)
  • 【Java】JDK1.8 HashMap源码,put源码详细讲解

       📝个人主页:哈__ 期待您的关注  在Java中,HashMap结构是被经常使用的,在面试当中也是经常会被问到的。这篇文章我给大家分享一下我对于HashMap结构源码的理解。 HashMap的存储与一般的数组不同,HashMap的每一个元素存储的并不是一个值,而是一个引用类型的Node结点,这

    2024年04月13日
    浏览(44)
  • SM4国密4在jdk1.7版本和jdk1.8版本中的工具类使用

    (一)首先,直接可用的工具类如下: 1、JDK1.8版本,使用hutool工具类实现SM4对称加密,pom依赖如下: 工具类实现: 打印信息: 2、JDK1.7版本,pom依赖如下: 工具类实现: 打印信息: 注:如果JDK1.7使用hutool包实现SM4,降低hutool的版本,也是可以实现的,实测可用: 注意: 如

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包