类和对象,以及 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 ...
随机推荐
- Python练习:哥德巴赫猜想
哥德巴赫猜想 哥德巴赫 1742 年给欧拉的信中哥德巴赫提出了以下猜想:任一大于 2 的偶数都可写成两个质数之和.但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死 ...
- redis的set类型!!!!
一.概述 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存在等操作.需要说明的是,这些操作的时间复杂度为 ...
- TensorFlow从1到2(七)线性回归模型预测汽车油耗以及训练过程优化
线性回归模型 "回归"这个词,既是Regression算法的名称,也代表了不同的计算结果.当然结果也是由算法决定的. 不同于前面讲过的多个分类算法或者逻辑回归,线性回归模型的结果是 ...
- ASP.NET Core微服务实战系列
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. 前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想 ...
- 数据结构与算法(九):AVL树详细讲解
数据结构与算法(一):基础简介 数据结构与算法(二):基于数组的实现ArrayList源码彻底分析 数据结构与算法(三):基于链表的实现LinkedList源码彻底分析 数据结构与算法(四):基于哈希 ...
- 企业移动应用和Smobiler
www.smobiler.com 什么是企业移动应用? 能够通过一种方式来为客户.合作伙伴和员工交付信息和服务,从而帮助其增加收入,提高业务敏捷性和生产力的移动端产品,我们称之为企业移 ...
- 让 .NET 更方便的导入导出 Excel
让 .Net 更方便的导入导出Excel Intro 因为前一段时间需要处理一些 excel 数据,主要是导入/导出操作,将 Excel 数据转化为对象再用程序进行处理和分析,没有找到比较满意的库,于 ...
- PoolEntry 参数讲解
public abstract class PoolEntry<T, C> { private final String id; private final T route; //路由 p ...
- C语言超级搞笑的代码,冷笑话我们程序员也会讲的啊!
百年修得足下点击本文 欢迎来到"C语言基础"专题,今天我们放松一天,不学习知识,来看下大千世界的千奇百怪的C语言代码,你见过那些? 1.关于随机数这回事 这个随机数有点意思哦. 2 ...
- 关于ios的光标和键盘回弹问题
最近再做项目的时候(移动端),遇到了两个小问题,一个是ios端键盘不回弹的问题(微信浏览器),另一个是ios输入光标位置问题.首先看第二个问题: 就是点击一个按钮,要把输入框里面原来的内容加上一些固定 ...