类和对象,以及 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 ...
随机推荐
- tomcat部署服务乱码问题
first:win+R -->输入regedit 打开注册列表HKEY_CURRENT_USER-->Console-->Tomcat-->CodePage修改成十进制6500 ...
- 微服务架构 - CentOS7离线部署docker
1.环境准备 系统环境为: CentOS Linux release 7.5.1804 (Core) 安装docker版本为: 17.12.0-ce 2.准备部署文件 在http://mirrors. ...
- String求求你别秀了
小鲁班今年计算机专业大四了,在学校可学了不少软件开发的东西,也自学了一些JAVA的后台框架,踌躇满志,一心想着找个好单位实习.当投递了无数份简历后,终于收到了一个公司发来的面试通知,小鲁班欣喜若狂. ...
- 《HelloGitHub》第 33 期
公告 欢迎 点击分享 自荐或发现的开源项目,也可安装 分享插件 更便捷地推荐有趣的开源项目. 小伙伴们,新的一年就要来了,今年的 Bug 改完了吗?先看看<HelloGitHub>最新一期 ...
- SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)
前言 本篇主要介绍的是SpringCloud相关知识.微服务架构以及搭建一个高可用的服务注册与发现的服务模块(Eureka). SpringCloud介绍 Spring Cloud是在Spring B ...
- 程序员如何巧用Excel提高工作效率 第二篇
之前写了一篇博客程序员如何巧用Excel提高工作效率,讲解了程序员在日常工作中如何利用Excel来提高工作效率,没想到收到很好的反馈,点赞量,评论量以及阅读量一度飙升为我的博客中Top 1,看来大家平 ...
- 图解CSS3-flex布局
前言 最近笔者在复习以前基础知识,发现很多细的知识点还是需要重新再总结一番.本文对flex布局进行图解说明,以后忘了的同学可以随时过来查看,欢迎转载,烦请注明出处. 主体 万丈高楼平地起,熟悉flex ...
- 14 ,CSS 文字与文本
1.CSS 中长度与颜色 2.CSS 中的文字属性 3.CSS 中的文本属性 14.1 CSS 中长度与颜色 长度单位 说明 in 英寸 cm 公分 mm 公里 cm 以目前字体高度为单位 ex 以小 ...
- CSS引入本地字体与在线字体
有些时候为了强调某些文字,需要使用一些比较特别的字体,CSS中现在也可以比较方便的引入字体了,如下: /* 定义字体 */ @font-face{ font-family: Arista2; src: ...
- 虹软人脸识别ArcFace2.0 Android SDK使用教程
一.获取SDK 1.进入ArcFace2.0的申请地址 https://ai.arcsoft.com.cn/product/arcface.html 2.填写信息申请并提交 申请通过后即可下载SDK, ...