首页 > 编程语言 >Java入门9(HashSet,File文件类)

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

时间:2023-05-22 12:44:20浏览次数:50  
标签:文件 Java HashSet System File println new out

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,"文件名")

返回文件绝对路径

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,HashSet,System,File,println,new,out
From: https://www.cnblogs.com/te9uila/p/17420327.html

相关文章

  • java通用xls导出设计
    背景在后端日常开发中总会有各种各样的导出需求,实现这个需求必须要解决的两个问题:1、表头不能直接使用字段名,需要显示为中文,甚至还需要考虑国际化2、值需要翻译,比如性别、状态之类的字段现状现在主流写的比较好的方法是定义一个对象,对象上用自定义的注解+easytrans我的解决......
  • 【iOS开发】launch Images启动图片设置(UILaunchImageFile)之002
    一、实现效果:通过直接给图片起默认的名字,让app启动页自动加载启动图片。二、注意点:·图片命名一定要按苹果官方的指定规则命名,图片的像素也要符合规则;·如果横竖屏图片都需要,记得在Xcode中勾选上项目支持横竖屏。三、官方描述:四、LaunchImage命名规则实例https://developer.apple.......
  • pod 插件报错: LoadError - cannot load such file -- cocoapods/command/gen
    报错信息:LoadError-cannotloadsuchfile–cocoapods/command/gen解决方法:geminstallcocoapods-generate......
  • Java使用HttpClient以multipart/form-data向接口上传文件
    前言对接某公司的接口,涉及到资质上传等业务。需要对接他们的上传附件接口。JDK1.8httpclient4.x封装httpclient方法publicstaticStringpostFileMultiPart(Stringurl,Map<String,ContentBody>reqParam)throwsIOException{ CloseableHttpClienthttpclient=HttpCl......
  • 基于springBoot框架JAVA语言汽车销售管理系统功能实现
    运行环境idea(推荐)、jdk1.8、mysql5.X(不能为8驱动不匹配)、maven项目技术springboot+vue项目描述本项目基于springboot以及Vue开发。针对汽车销售提供客户信息、车辆信息、订单信息、销售人员管理、财务报表等功能,提供经理和销售两种角色进行管理。1.安装好node环境2.......
  • 基于JAVA语言实现的养老信息管理系统
    项目描述本系统的主要功能有:账号管理:管理员账号,用户账号健康管理:健康档案,病例档案,药品管理生活管理:每月餐饮,外出报备入住管理:入住登记,寝室分配安全管理:事故记录,访客记录收费标准:入住费用,护理费用运行环境idea+mysql5.7+jdk1.8+maven3项目技术SpringBoot,MySql,ajax,MyBatis......
  • 探索Spring:Java开发的优秀框架
    简介:Spring是Java开发领域中最受欢迎和广泛应用的开源框架之一。它提供了一个全面的编程和配置模型,用于构建现代化的企业级应用程序。本博客将深入探讨Spring框架的重要特性和优势,并解释为什么Spring成为Java开发人员的首选框架。正文:介绍Spring框架Spring是一个轻量级、灵活且功......
  • JavaScript在策划网站中的应用
    JavaScript在策划网站中有许多应用,以下是其中的一些:1. 表单验证:JavaScript可以用来验证用户提交的表单数据,例如验证邮箱格式、密码强度等,比如某某策划网站就是用的这样的代码。2. 动态效果:JavaScript可以用来实现网页上的动画效果和交互特效,例如轮播图、下拉菜单等。3. Ajax请......
  • Java缓存行对齐
    来源:  https://blog.csdn.net/mofeizhi/article/details/106816026  ......
  • Linux 安装配置Java
    1、下载文件Javajdk-8u371-linux-x64.tar.gz 2、上传并解压文件#tar-zxvfjdk-8u371-linux-x64.tar.gz 3、配置环境变量#JavaexportJAVA_HOME=/usr/local/jdk1.8.0_371exportPATH=$JAVA_HOME/bin:$PATHexportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/l......