- 博客(19)
- 收藏
- 关注
原创 文件操作和IO(Java)
本文系统介绍了Java中的文件操作相关知识。首先讲解了IO、存储设备、硬盘类型和文件系统等基础概念。然后详细阐述了Java中File类的使用,包括文件属性获取、创建删除、目录操作等核心方法,并提供了完整的代码示例。最后重点讲解了文件内容的读写操作,涵盖InputStream/OutputStream字节流读写、Scanner字符读取以及PrintWriter格式化输出等关键技术点。全文通过理论结合实践的方式,帮助读者掌握Java文件操作的核心技能。
2025-10-19 11:53:15
1034
原创 Hashtable,HashMap,ConcurrentHashMap之间的区别
本文对比分析了Hashtable、HashMap和ConcurrentHashMap的核心特性。Hashtable采用全局锁保证线程安全但性能低;HashMap非线程安全但单线程性能优异;ConcurrentHashMap通过细粒度锁机制实现高并发性能。三者在空值支持、继承关系等方面也存在差异:Hashtable和ConcurrentHashMap不允许null键值,而HashMap允许;继承关系上分别源自Dictionary、AbstractMap等不同父类。使用场景建议:单线程用HashMap,高并发用
2025-10-11 20:56:31
817
原创 synchronized (Java)
Java中的synchronized关键字具有原子性、可见性和锁升级等特性,支持修饰方法和代码块。在方法上使用时,实例方法锁定当前对象,静态方法锁定类对象;在代码块中可指定任意对象作为锁。其锁机制会根据竞争情况从无锁逐步升级为偏向锁、轻量级锁(含自旋锁)和重量级锁,兼顾性能与线程安全。偏向锁通过标记减少开销,轻量级锁通过自旋避免阻塞,而重量级锁则在竞争激烈时确保安全。synchronized还具有可重入性,但不公平且非读写锁。
2025-10-09 22:50:06
367
原创 多线程(下)
本文介绍了Java多线程编程中的核心组件:阻塞队列(BlockingQueue)实现了生产者-消费者模型,通过循环队列和同步锁实现线程安全;线程池(ThreadPool)通过复用线程减少创建销毁开销,使用任务队列管理任务;定时器(Timer)利用优先级队列实现延时任务调度。文章还对比了线程与进程的区别,指出线程更轻量级、共享资源且切换效率高。标准库提供了这些组件的实现,如ArrayBlockingQueue、ThreadPoolExecutor和Timer类等,开发者可直接使用。这些组件能有效解决多线程编程
2025-09-30 13:26:01
1025
原创 多线程(中)
摘要:本文系统介绍了多线程编程中的线程安全问题及解决方案。主要内容包括:1)线程不安全的原因,如随机调度、共享数据修改、原子性缺失等;2)synchronized关键字的互斥和可重入特性;3)volatile关键字保证可见性;4)wait/notify机制实现线程同步;5)单例模式的线程安全实现(饿汉式和懒汉式)。通过代码示例详细演示了各种线程安全问题的表现及对应的解决方案,为开发多线程程序提供了实践指导。
2025-09-18 21:50:30
856
原创 多线程(上)
本文系统介绍了Java线程的核心知识,包括线程概念、创建方式、常用方法和状态管理。主要内容有:1)线程是轻量级执行单元,共享进程资源,支持并发执行;2)创建线程的5种方式(继承Thread类/实现Runnable接口/匿名类/lambda表达式);3)Thread类的重要方法(start/interrupt/join/sleep等)和属性;4)线程6种状态(NEW/RUNNABLE/WAITING等)及其转换机制。文章通过具体代码示例,详细演示了多线程编程的关键技术要点。
2025-09-10 22:01:00
581
原创 Map和Set(Java)
本文系统介绍了数据结构中的二叉搜索树、Map/Set使用和哈希表原理。主要内容包括:二叉搜索树的概念、查找/插入/删除操作及Java实现;Map和Set的接口特性、常用方法及TreeMap/TreeSet的使用;哈希表的概念、哈希函数设计、冲突解决方法(开散列和闭散列)及性能优化。重点分析了哈希表负载因子调节和冲突处理机制,比较了不同数据结构的适用场景和性能特点,为数据结构的选择和应用提供了理论指导。
2025-08-29 18:52:49
676
原创 排序算法(Java)
本文系统介绍了常见排序算法及其实现原理。主要内容包括:1.排序基本概念与分类(内部/外部排序、稳定性);2.四大类排序算法实现:插入排序(直接插入、希尔)、选择排序(直接选择、堆)、交换排序(冒泡、快速排序三种方法)、归并排序;3.算法特性分析(时间复杂度、空间复杂度、稳定性),如快速排序O(nlogn)但不稳定,归并稳定但需O(n)空间;4.非比较型计数排序的原理与特点。文章通过代码示例和步骤分解,详细讲解了各算法的核心思想和优化策略(如三数取中、小规模插入等),为理解排序算法提供了全面参考。
2025-08-16 16:14:43
1028
原创 Java优先级队列
Java集合框架中提供了和两种类型的优先级队列,PriorityQueue是线程不安全的PriorityBlockingQueue是线程安全的。使用PriorityQueue使用时必须导入PriorityQueue所在的包PriorityQueue中放置的元素要能够比较大小,如果插入不能比较的对象就会抛出ClassCastException异常不能插入null对象,且对于自定义对象必须确保可比较(实现Comparable接口或提供Comparator)
2025-07-22 21:54:55
797
原创 Java二叉树
树结构的表示法比较复杂,储存起来比较麻烦,表示方法有:双亲表示法,孩子表示法,孩子双亲表示法,孩子兄弟表示法。有一个特殊的节点是根节点,没有前驱节点(父亲节点)。而我们所要了解的二叉树是一颗倒着的树,它的根在上面。它由一组节点(node)和连接这些节点的边组成,每个节点最多。二叉树的遍历是指按照一定的顺序访问二叉树中的每个节点,且每个节点仅被访问一次。若一个节点含有子节点,则这个节点称为其子节点的父节点;从根节点开始,按照从上到下,从左到右的顺序依次访问每层的节点。一颗树中,没有父节点的节点;
2025-06-04 21:03:03
1010
原创 Java栈和队列
如图可见Stack继承了Vector,Vector的大小是可以动态变化的,它和ArrayList类似,但Vector是线程安全(方法大多是同步的,在多线程环境下可以安全地访问),但在一些不需要线程安全的场景下ArrayList通常是更好的选择,它的性能更高。在单向链表中,链表的头部相当于栈顶,当进行入栈操作时,在链表头部插入一个新节点,新节点的数据就是要入栈的元素,也就成为链表的头结点(使用头插法),也就是栈顶元素,出栈操作就是删除链表的头结点。的原则储存数据,先进入的元素被压入栈底最后的数据在栈顶。
2025-05-10 15:46:22
1079
原创 Java中的异常
在Java中虽然已经内置了丰富的异常类,但是并不能完全表示实际开发中所遇到的异常,这时候就需要我们来实现一个自定义的异常了。实现一个用户登录功能自定义异常类,然后继承Exception或RunTimeException实现一个带有String类型参数的构造方法if(!throw new UserNameErrorException("用户名错误"+username);if(!throw new PasswordErrorException("密码错误"+password);
2025-04-05 20:52:31
758
原创 java抽象类和接口
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来并不是所有的类都是用来描绘对象的,,这样的类就是抽象类。例如:一只小鸟和一只小狗,在Animal这个类中可以写出它们共同之处,但不能完整描绘出任意一个动物的具体方法比如鸟会飞但小狗不会,所以我们可以把animal定义为抽象类。
2025-04-02 11:39:23
613
原创 java继承和多态
是面向对象编程中的一个重要概念,是一种类与类之间的关系,子类可以获取父类的成员(包括属性和方法),并可以在此基础上添加自己的新成员属性和方法,还可以重写父类的方法。重写是指在子类中重新定义父类已存在的方法,子类可以根据自身的需求对父类的方法进行不同的实现,从而实现多态性。在构造方法中:this(···)用来调用本类的构造方法,super(···)用来调用父类的构造方法,不能同时出现。子类会继承父类的数据,可能还会使用父类的数据,所以子类在初始化之前会先完成父类的初始化。
2025-03-23 17:50:13
882
原创 类和对象续
在⽂件的最上⽅加上⼀个package语句指定该代码在哪个包中,包名要和代码路径相匹配,例如创建的包,那么会存在一个对应的路径来存储代码,如果一个类没有 package 语句, 则该类被放到一个默认包中。操作:1、在IDEA中先新建一个包:右键src ——> 新建 ——>package2、在弹出的框中输入包名,eg:com.jap.pack3、然后在包中创建类即可:右键包 ——> 新建 ——> 类,输入类名即可4、然后在Test类中就出现了package语句。
2025-03-19 22:49:51
779
原创 java类和对象
没有返回值类型,void也不可以,构造方法可以重载,如果没有写构造方法,编译器会生成一份默认的无参构造方法,一旦定义了一个构造方法,编译器将不会再生成。以上程序我们定义了一个Date类,并通过SetDate来传参赋值和PrintDate来打印,我们并没有传0,为什么打印是0/0/0,定义一个类相当于在计算机中定义了一个新的类型,类似与int、double之类,在java中用new关键字来配合类来。在洗碗机工作时我们不需要关注它是怎么运转的,只需要启动开关即可,这个就是依靠对象之间的交互来完成,这就是。
2025-03-15 00:06:37
607
原创 C语言分支循环语句
else 关系操作符有: >, <, >=, <=,!=是赋值,==是判断是否相等。1、 if(表达式){ if语句为真才执行,,为假不执行。switch后的表达式必须是整型表达式;case后的值必须为整型常量表达式。case value1(值): 语句块;
2024-12-02 22:27:07
341
原创 初学编程感受与想法
我学习编程是0基础,我肯定得下比别人多好几倍的时间来学习,俗话说:基础不牢,地动山摇。所以我会先把最基础的东西了解透彻,我会通过一些学习网站来查阅资料,观看学习视频,阅读一些编程相关书籍,通过实际操作来发现不足,我每周打算花费3-5小时来学习编程,我最想进入的IT公司是腾讯。兄弟姐妹们,my name is霍海玉,我来自山西,现在是一位大一新生,我背井离乡来到了宁夏,让我感受到了不一样的文化,相信也有和我一样的朋友们也远离家乡有着不同的感受,我学习的专业是大数据,希望大家多多指教,一起进步!
2024-11-23 20:40:08
238
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅