类和对象,以及 LeetCode 每日一题
所有类都是引用类型。
1 定义类
类是某一批对象的抽象。
1.1 定义类的语法:
[修饰符] class 类名{
零到多个构造器定义
零到多个成员变量
零到多个方法
}
对于一个类定义而言,可以包含三种最常见的成员:构造器、成员变量、方法
- 修饰符可以是 public、final 、 abstract ,或者完全省略修饰符。
- 类里各成员之间的定义顺序没有任何影响,各成员之间可以相互调用,需要指出的是,static 修饰的成员不能访问没有 static 修饰的成员。
- 构造器用于构造该类的实例,Java语言通过 new 关键字来调用构造器从而返回该类的实例。构造器是创建对象的根本途径,如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器。一旦程序员提供了构造器,系统不再为该类提供构造器。
1.2 定义成员变量
[修饰符] 类型 成员变量名 [= 默认值];
- 修饰符可以省略,也可以是 public、protected、private、static、final,其中 public、protected、private 三个最多只能出现一个
- 类型可以是 Java 语言允许的任何类型,包括基本类型和引用类型
1.3 定义方法
[修饰符] 方法返回值类型 方法名(形参列表){
//方法体
}
- 修饰符可以省略,也可以是 public、protected、private、static、final、abstract,其中 public、protected、private 最多选一个,final 和 abstract 最多选一个。
- static 是一个特殊的关键字,它可用于修饰方法、成员变量等成员。static修饰的成员表面它属于这个类本身,而不属于该类的实例,静态(static)成员不能直接访问非静态成员。
1.4 构造器
[修饰符] 构造器名(形参列表){
//构造执行体
}
- 修饰符可以省略,也可以是 public、protected、private 其中之一
- 构造器名必须与类名相同
- 构造器不能定义返回值类型,也不能用void声明
2 对象的产生和使用
- 创建对象的根本途径是构造器,通过 new 关键字可以调用某个类的构造器即可创造这个类的实例。
Java 的对象有两个作用:
- 访问对象的实例变量
- 调用对象的方法
- 如果权限允许,类里定义的方法和成员变量都可以通过类或实例来调用:类.类变量|方法,或者实例.实例变量|方法。
- static 修饰的方法和成员变量,既可以通过类来调用,也可通过实例来调用;没有 static 修饰的普通方法和成员变量,只可通过实例来调用。
- this 引用,this 关键字总是指向调用该方法的对象。
- 如果调用 static 修饰的成员,忽略了前面的主调,那么默认使用该类作为主调;如果调用没有 static 修饰的成员时省略了前面的主调,那么默认使用this作为主调。
PS:如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须用this前缀。
3 LeetCode 练习题
题目:21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode list = null;
if(l1 ==null && l2 == null){
return list;
}else if (l1 == null){
list = new ListNode(l2.val);
l2 = l2.next;
}else if(l2 == null){
list = new ListNode(l1.val);
l1 = l1.next;
}else{
if(l1.val > l2.val){
list = new ListNode(l2.val);
l2 = l2.next;
}else{
list = new ListNode(l1.val);
l1 = l1.next;
}
}
ListNode tmp = list;
while(l1 != null || l2 != null){
if(l1 == null){
tmp.next = new ListNode(l2.val);
tmp = tmp.next;
l2 = l2.next;
}else if(l2 == null){
tmp.next = new ListNode(l1.val);
tmp = tmp.next;
l1 = l1.next;
}else{
if(l1.val < l2.val){
tmp.next = new ListNode(l1.val);
tmp = tmp.next;
l1 = l1.next;
}else{
tmp.next = new ListNode(l2.val);
tmp = tmp.next;
l2 = l2.next;
}
} }
return list;
}
}
这是第一次接触链表,第一步设置表头的时候有点笨拙,看到评论中的设置 dummyHead ,最后输出 dummyHead.next 的方法,可以使代码更简洁一点,但实际性能应该差不多,这道题我的答案执行用时 2 ms。另外还有另一种方案是将两个链表的节点重新串起来,这样耗费的内存会更小,速度也更快,缺点是原本的两条链表会被破坏,不能再次使用了。
类和对象,以及 LeetCode 每日一题的更多相关文章
- 【python】Leetcode每日一题-前缀树(Trie)
[python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...
- 【python】Leetcode每日一题-二叉搜索迭代器
[python]Leetcode每日一题-二叉搜索迭代器 [题目描述] 实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器: BSTIterator(T ...
- 【python】Leetcode每日一题-设计停车系统
[python]Leetcode每日一题-设计停车系统 [题目描述] 请你给一个停车场设计一个停车系统.停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位. 请你实现 Parki ...
- 【js】Leetcode每日一题-制作m束花所需的最少天数
[js]Leetcode每日一题-制作m束花所需的最少天数 [题目描述] 给你一个整数数组 bloomDay,以及两个整数 m 和 k . 现需要制作 m 束花.制作花束时,需要使用花园中 相邻的 k ...
- 【JavaScript】Leetcode每日一题-在D天内送包裹的能力
[JavaScript]Leetcode每日一题-在D天内送包裹的能力 [题目描述] 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i] ...
- 【js】Leetcode每日一题-完成所有工作的最短时间
[js]Leetcode每日一题-完成所有工作的最短时间 [题目描述] 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工 ...
- 【js】Leetcode每日一题-数组异或操作
[js]Leetcode每日一题-数组异或操作 [题目描述] 给你两个整数,n 和 start . 数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == ...
- 【js】Leetcode每日一题-解码异或后数组
[js]Leetcode每日一题-解码异或后数组 [题目描述] 未知 整数数组 arr 由 n 个非负整数组成. 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encode ...
- 【JavaScript】Leetcode每日一题-青蛙过河
[JavaScript]Leetcode每日一题-青蛙过河 [题目描述] 一只青蛙想要过河. 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有). 青蛙可以跳上石子 ...
- 【JavaScript】Leetcode每日一题-平方数之和
[JavaScript]Leetcode每日一题-平方数之和 [题目描述] 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 示例1: 输入:c = 5 ...
随机推荐
- UWP中实现大爆炸效果(一)
自从老罗搞出大爆炸之后,各家安卓都内置了类似功能.UWP怎么能落下呢,在这里我们就一起撸一个简单的大爆炸实现. 闲话不说,先上效果: 因为代码太多,所以我打算写成一个系列,下面是第一篇的正文: 首先, ...
- 字符串、List集合、数组互转
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Songti SC"; color: #3933ff } p.p2 { ...
- JS的 try catch使用心得
try{ //正常执行 }catch(e/*你感觉会出错的 错误类型*/){ // 可能出现的意外 eg:用户自己操作失误 或者 函数少条件 不影响下面的函数执行 // 有时也会用在 比如 focus ...
- 解决tomcat部署项目中碰到的几个问题
在tomcat上部署项目并进行测试,经常会碰到各种问题.在不同的操作系统上部署,对问题的解决也会有一些差异. 1 发现问题 1.1 项目部署 先将项目达成war包,放到tomcat的webapps目录 ...
- Python-炫酷二维码
一.环境 首先是安装python环境,如果没有安装python环境看此处 二.myqr myqr 其实是一个 python 的脚本,可以生产二维码图片,作者也对python脚本进行了打包,在 ...
- 使用WebGL 自定义 3D 摄像头监控模型
前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...
- Docker入门(三)使用Docker Compose
Compose介绍 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 ...
- docker(5):数据的管理
Docker的volume卷 为了能持久话保存和共享容器的数据. 使用docker volume卷的两种方式 1:数据卷 2:数据卷容器 1:数据卷 数据卷:数据卷会绕过docker 的ufs 直接写 ...
- Multi Reflection (Pro Only)
Case 14 - Double Injection in HTML Context with Double Quotes https://brutelogic.com.br/multi/double ...
- 供应链管理为什么要上企业自主可控的免费开源ERP Odoo
引言 今天的很多企业,无论是制造业,还是商贸行业,如果说没有针对供应链管理的信息系统,那可能是真的冤枉他们了:采购.仓存.销售.存货核算这些模块,早早的买来,早早的用上了,但也早早的被下了结论:食之无 ...