类和对象,以及 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 ...
随机推荐
- 干货,一文带你超详细了解Session的原理及应用
session 简介 session 是我们 jsp 九大隐含对象的一个对象. session 称作域对象,他的作用是保存一些信息,而 session 这个域对象是一次会话期间使用同一个对象.所以这个 ...
- Nginx+Keepalived 集群方案
1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,kee ...
- JVM 第一次学习总结(2019年4月)
1.内存模型 起源:在计算机系统,加入了一层读写速度尽可能接近处理器运算速度的高速缓存来作为内存和处理器之间的缓冲. 问题:缓存一致性.在多处理器系统中,每个处理器都有自己的高速缓存(抽象为工作内存) ...
- 【RecyclerView优化】
1.局部刷新 (1)避免整个列表的数据更新,只更新受影响的布局.例如,加载更多时,不使用notifyDataSetChanged(),而是使用notifyItemRangeInserted(range ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg
生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具,Dump文件类似于飞机的黑匣子,记录着生产环境程序 ...
- C#操作符??,?,?:功能解析
??操作符:叫做空合并操作符,它会对左右两个操作数进行判断,如果左边的数不为空,就返回左边的数,否则返回右边的数. ?操作符:语法糖,表示可空类型,可空类型也是值类型,它是包含null值的值类型,可通 ...
- .net mvc + layui做图片上传(一)
图片上传和展示是互联网应用中比较常见的一个功能,最近做的一个门户网站项目就有多个需要上传图片的功能模块.关于这部分内容,本来功能不复杂,但后面做起来却还是出现了一些波折.因为缺乏经验,对几种图片上传的 ...
- 激活效能,CODING 敏捷研发模块上线
昨晚,巴黎圣母院失火,而我们当中的许多人都还没来得及去欣赏它的真容.我们曾以为美好的事物会等待我们,伟大的目标也会等待我们.世事无常,唯一不变的就是变化.在软件研发领域,敏捷研发就是这么一个小步快跑来 ...
- Android之OkHttp详解
文章大纲 一.OkHttp简介二.OkHttp简单使用三.OkHttp封装四.项目源码下载 一.OkHttp简介 1. 什么是OkHttp 一般在Java平台上,我们会使用Apache Htt ...
- sqlserver—数据完整性(理论篇)
数据完整性主要指的是数据的精确性和可靠性,目的就是为了防止数据库中存放的数值,以及字符具有合法性(即按照管理员定义的规则进行存放) 分为以下四类: 实体完整性 实体完整性要求每一个表中的主键字段都不能 ...