![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java学习
vm04580
这个作者很懒,什么都没留下…
展开
-
深入理解 Java HashMap
HashMap源码解读(内部哈希算法、负载因子、树化、扩容)树化: 当数组下标对应的链表长度 >= 8(添加完新结点之后的链表长度),并且此时哈希表的长度 >= 64,将链表树化,否则只是进行了简单的扩容处理树化原因: 当链表长度过长时,哈希表的CURD的时间复杂度会退化为O(n)static final int TREEIFY_THRESHOLD = 8;//默认树化阈值st...原创 2019-08-18 15:09:34 · 112 阅读 · 0 评论 -
删除排序数组中的重复项
题目描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定...原创 2019-05-07 19:31:48 · 152 阅读 · 0 评论 -
判断一个整数是否是回文数
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。cl...原创 2019-05-07 15:56:06 · 1383 阅读 · 0 评论 -
二叉树前序、中序、后序遍历递归版
二叉树:一个结点最多只有两个孩子定义二叉树类 private static class Node{ char value; Node left; Node right; Node(char v){ this.value = v; } }二叉树前序遍历 //前序遍历,递归...原创 2019-05-19 22:24:21 · 146 阅读 · 0 评论 -
求1+2+3+...+n—要求不能使用乘除法、循环、判断等关键字
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题目要求时间限制:1秒 空间限制:32768K解题思路: 利用逻辑与(&&)的短路实现递归出口,如果 n == 0 ,(n>0) && ((temp += Sum_Solution(n-1))>0);执...原创 2019-05-06 21:27:10 · 475 阅读 · 0 评论 -
顺时针打印矩阵—将输入的矩阵按顺时针顺序输出
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.题目要求:时间限制:1秒 空间限制:32768K解题思路: 顺时针循环打印数组,每一层都要分别设置循环来遍历,最...原创 2019-05-06 20:45:03 · 664 阅读 · 0 评论 -
二进制中1的个数—求一个整数的二进制序列中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。时间限制:1秒 空间限制:32768K**解题思路:**先将该整数转为二进制字符串,在将字符串转为字符数组,计算字符数组中1的个数Integer.toBinaryString(n)//将整数n转为二进制字符串*. toCharArray()//将字符串转为字符数组public class Solution { ...原创 2019-04-29 12:07:01 · 399 阅读 · 0 评论 -
求旋转数组的最小元素
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。时间限制:3秒 空间限制:32768K解题思路:旋转数组是说将一个有序数组的前面几个元素整体搬到数组的最后面,...原创 2019-04-29 11:47:02 · 298 阅读 · 0 评论 -
Java类集 之Collection接口及其子类List、Set接口的使用
Java 类集类集本质上属于动态对象数组,数组有一个最大的缺陷就是长度固定,所有Java类集框架就是为了解决数组长度问题。数据结构中最基础的就是链表先来回顾一下链表的特点:1、节点关系的处理操作,核心需要一个Node类用来保存数据、设置索引2、进行链表数据的查找、删除时需要equals()方法支持Collection集合接口Collection接口是单个集合保存的最大父接口,每一次进行...原创 2019-04-24 11:42:51 · 248 阅读 · 0 评论 -
矩阵覆盖—用小矩阵无重叠的覆盖大矩阵,求共有多少种覆盖方法
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?时间限制:1秒 空间限制:32768Kpublic class Solution { public int RectCover(int target) { if(target == 0){ return 0; ...原创 2019-04-28 13:39:42 · 364 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数之前
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。时间限制:1秒 空间限制:32768Kpublic class Solution { public void reOrderArray(int [] array) { for(int i = 0; i &...原创 2019-04-26 13:59:14 · 168 阅读 · 0 评论 -
替换空格—将字符串中的每个空格进行替换
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Solution { public String replaceSpace(StringBuffer str) { if(str == null){ return n...原创 2019-04-26 13:53:53 · 283 阅读 · 0 评论 -
JDBC编程步骤
JDBC编程优势:I、Java语言访问数据库操作完全面向抽象接口编程II、开发数据库应用不用限定在特定的数据库厂商APIIII、程序可移植性增强流程: 开始——加载数据库驱动——建立数据库连接——创建操作命令——执行SQL语句——处理返回结果集——关闭结果集——关闭操作命令——关闭连接——结束import java.sql.*;public class Test { pub...原创 2019-05-07 19:59:47 · 244 阅读 · 0 评论 -
用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题目要求:时间限制:1秒 空间限制:32768Kimport java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<In...原创 2019-05-26 23:12:09 · 90 阅读 · 0 评论 -
Java 类集复习总结
类集复习(阅读部分源码)1.ArrayList、Vector、LinkedList的关系与区别以上三个类都是List接口下的常用子类,其中ArrayList与Vector基于数组实现,LinkedList基于双向链表实现ArrayList采用懒加载策略(第一次add时才初始化内部数组,默认初始化大小为10),扩容时扩容为原先数组的1.5倍,采用异步处理,线程不安全,性能较高。ArrayLi...原创 2019-08-15 15:42:59 · 137 阅读 · 0 评论 -
Java垃圾回收机制
垃圾回收如何判断对象是否存活?缓存阶段(finalize())如何进行垃圾回收(GC算法)判断对象是否存活的方法:引用计数:给对象增加引用计数器,但是无法解决循环引用问题可达性分析算法:以 GC Roots对象作为起始点,从这个点向下搜索,搜索走过的路径称为“引用链”,当一个对象到GCRoots没有任何引用链相连时,(从GC Roots到这个对象不可达),则认为这个对象不可用...原创 2019-08-18 19:58:37 · 140 阅读 · 0 评论 -
求两个链表的第一个公共结点
时间限制:1秒 空间限制:32768K牛客网链接:两个链表的第一个公共结点题目描述输入两个链表,找出它们的第一个公共结点。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public cla...原创 2019-07-28 13:32:26 · 106 阅读 · 0 评论 -
确定两串乱序同构—比较两个字符串能否重新排列为相同的字符串
题目描述给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串中的空格。给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。题目链接: 确定两串乱序同构_牛客网测试样例:“This is nowcoder”,“is ...原创 2019-06-23 11:01:46 · 534 阅读 · 0 评论 -
二叉搜索树的后序遍历序列—判断一个数组是否为二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题目要求时间限制:1秒 空间限制:32768K 热度指数:413862题目链接:二叉搜索树的后序遍历序列_牛客网二叉搜索树:左子树的节点均小于父节点;右子树的节点均大于父节点后序遍历:父节点总是出现在左右子树的后面public class ...原创 2019-06-22 17:26:31 · 435 阅读 · 0 评论 -
从上往下打印二叉树(同层从左往右)
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目要求:时间限制:1秒 空间限制:32768K 热度指数:360613题目链接: 从上往下打印二叉树_牛客网import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;/**public class TreeNode {...原创 2019-06-22 16:49:12 · 431 阅读 · 0 评论 -
原串翻转—翻转一个给定的字符串
题目描述:请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。测试样例:“This is nowcoder”返回:“redocwon si sihT”import java.util.*;public class R...原创 2019-06-18 21:45:38 · 303 阅读 · 0 评论 -
确定字符互异—确定字符串的所有字符是否全都不同
题目描述:请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。测试样例:“aeiou”返回:True“BarackObama”返回:Falseimport...原创 2019-06-18 21:39:24 · 406 阅读 · 0 评论 -
Java单例设计模式及其优缺点
单例模式的实现什么是单例设计模式?单例模式,是一种常用的软件设计模式。它的核心思想是指,一个类只允许产生一个实例化对象。单例设计模式实现要求:1、构造方法私有化,保证在类的外部不能通过使用new关键字来实例化对象2、在类的内部产生实例化对象,调用类的具体方法,使用private static 封装3、提供一个getter()方法,返回该对象具体实现饿汉式单例模式 ——直接new的...原创 2019-06-05 21:21:25 · 584 阅读 · 0 评论 -
Java Socket编程—网络聊天室多线程升级版
服务器端MultiThreadServer.java/** * 服务器 */ import java.io.IOException;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Collection;import java.util...原创 2019-05-28 20:53:26 · 283 阅读 · 0 评论 -
Java Socket编程—基于Socke编程的单线程网络聊天室
先上代码SingleThreadServer.java//服务器端import java.io.IOException;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;public class SingleThreadSe...原创 2019-05-28 20:42:04 · 729 阅读 · 0 评论 -
从头到尾打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList解题思路:定义一个新的链表,遍历原有链表,将原链表的值头插到新链表里/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import ...原创 2019-04-14 11:02:07 · 258 阅读 · 0 评论 -
反转链表—将给定链表元素进行逆置
输入一个链表,反转链表后,输出新链表的表头。解题思路:定义新链表的头结点,循环遍历原链表,将原链表的结点头插到新链表,最后返回新链表的头结点/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/pub...原创 2019-04-26 13:41:14 · 365 阅读 · 0 评论 -
Java SE 之面向对象编程——类与对象
1.代码块代码块定义:使用"{}"定义的一段代码根据代码块的位置以及关键字,可以简单分为以下四种:a.普通代码块b.构造块c.静态块d.同步代码块普通代码块定义:定义在方法中的代码块public class Test1{ public static void main(String[] args){ //直接用{}定义,普通方法块 ...原创 2018-11-30 20:42:59 · 289 阅读 · 0 评论 -
Java 抽象类与接口的使用
抽象类的定义与使用抽象类的概念:抽象类就是在普通类的基础上扩充一些抽象方法,所谓的抽象方法指的是值声明而未实现的方法(没有方法体)所有的抽象方法要求使用abstract关键字来定义,并且抽象等待所在的类也一定要用abstract关键字定义,表示抽象类abstract class Person{//定义一个抽象类 private String name;//属性 ...原创 2018-12-02 17:36:34 · 346 阅读 · 0 评论 -
Java static关键字的作用
static修饰属性和方法static变量 —— 类属性(静态属性)class Dog{ String talk = "汪汪"; String name; int age; public void getInfo(){ System.out.println("姓名:"+this.name+",年龄:"+this.age+",叫声:"+thi...原创 2018-11-26 16:52:32 · 286 阅读 · 0 评论 -
Java SE——private实现封装处理 && 构造方法
private封装:封装是面向对象最复杂的概念,使用private关键字的封装处理只是封装的第一步,要想完全掌握封装需要学习继承和多态一个没有封装的程序class Person{ String name; int age; public void getPersonInfo(){ System.out.println("姓名:"+name+",年...原创 2018-11-25 16:18:17 · 1192 阅读 · 1 评论 -
Java SE 之面向对象——类与对象的定义和使用
在这里先给大家介绍一些名词OOA:面向对象分析OOD:面向对象设计OOP:面向对象编程面向对象的三大特征:a.封装性:所谓封装就是把客观事物封装成抽象的类,并且类可以让自己的数据和方法只让可信的类或对象操作,对不可信的进行隐藏。换句话说就是:内部操作外部而言不可见b.继承性:可以使用现有类的所有功能,并且在无需重新编写原有代码的前提下对这些功能进行扩展c.多态性(**):多态就...原创 2018-11-25 14:51:13 · 561 阅读 · 0 评论 -
Java SE—面向对象 this关键字的作用
this关键字有三个用途:a.this调用本类属性b.this调用本类方法c.this表示当前对象this调用本类属性class Person{ private String name; private int age; public Person(String name,int age){ name = name ; age ...原创 2018-11-25 17:03:49 · 690 阅读 · 0 评论 -
用Java编写 给定一个数组,要求统计出该数组中的最大值、最小值、平均及总数
public class Test { public static void main(String[] args) { int arr[] = new int[]{4,6,22,3,16,78,9,26}; int max = arr[0];//最大值 int min = arr[0];//最小值 int sum = a...原创 2018-11-21 15:37:55 · 9649 阅读 · 0 评论 -
Java SE— 对象数组的定义与使用
对象数组:对象数组通常是以引用数据类型的定义,例如类,接口。对象数组的动态初始化语法:类名称[] 对象数组名称 = new 类名称[长度];对象数组保存的内容比普通数据类型多,需要熟练使用。class Person{ private String name; private int age; public Person(String name, int a...原创 2018-11-21 15:00:28 · 750 阅读 · 0 评论 -
Java SE 之数组的定义与使用
数组的定义与使用目前对于数组来说最大的缺陷就是:数组长度是固定的,可能会产生范访问越界数组的基本概念 数组动态初始化 (声明并开辟数组) 只声明不赋值:数据类型[] 数组名称 = new 数据类型 [长度] 数组动态初始化开辟空间后,若不对其进行赋值,数组的每个元素都是该数据类型的默认值 int[] stu = new int[5];//长度为5 的数组...原创 2018-11-21 12:41:19 · 331 阅读 · 0 评论 -
Java SE入门—基础知识
**要想学好Java就得从最基础开始**接下来我介绍一下Java的部分基础知识public class Test { public static void main(String[] args){ System.out.println("Hello Java"); }}**由以上代码可以看出,一个Java程序包含三部分(1.源文件 2.类 3.方...原创 2018-11-16 20:26:43 · 258 阅读 · 0 评论 -
Java SE-方法的定义与使用
方法的定义: 方法就是一段可以被重复调用的代码块注:以下方法均需在主类中定义,并且在主方法中调用方法的声明: public static 方法返回值 方法名称(参数类型 变量名, ...){ 方法体; return 返回值;//如果方法返回值用void声明,此方法没有返回值 }public class Test { public ...原创 2018-11-18 18:31:45 · 303 阅读 · 0 评论 -
Java SE——方法重载与方法覆写的区别
方法重载(overload)与方法覆写(override)的区别:1、在概念上: 重载:方法名称相同,参数类型及个数不同 覆写:方法名称、返回值类型、参数的类型及个数完全相同 2、在范围上: 重载:发生在一个类里 覆写:发生在两个有继承关系的类里 3、在权限限制方面: 重载:没有权限限制 覆写:被覆写的方法不能拥有比父类更严格的...原创 2018-11-30 21:13:13 · 253 阅读 · 0 评论 -
Java SE 之三个特殊的类
String类(java.long.String)——引用数据类型1、String类的两种实例化方式//直接赋值:(在堆上开辟内存)String str = "Hello World";System.out.println(str);//直接赋值的方式是最为常见,但是String本身就是一个类,一定存在构造方法//String类的构造方法:public String(Strin...原创 2019-02-23 21:33:31 · 234 阅读 · 0 评论