类和对象,以及 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 ...
随机推荐
- MySQL 上手教程
安装 通过官网选择版本下载安装.Mac 上可通过 Homebrew 方便地安装: $ brew install mysql 检查安装是否成功: $ mysql --version mysql Ver ...
- 3.python词云图的生成
安装库 pip install jieba wordcloud matplotlib 准备 txt文本 字体(simhei.ttf) 词云背景图片 代码 import matplotlib.pyplo ...
- .Net Core使用Redis(CSRedis)
前言 CSRedis是国外大牛写的.git地址:https://github.com/2881099/csredis,让我们看看如果最简单的 使用一下CSRedis吧. 引入NuGet 获取Nuget ...
- 腾讯视频国际版(Android)电量测试方法研究与总结
本文由云+社区发表 作者:腾讯移动品质中心TMQ 1.研究背景: 在2017年Google I/O大会上,Google发布了Google Play管理中心的新功能:Android vitals.当ap ...
- 详解synchronized与Lock的区别与使用
知识点 1.线程与进程 在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程.关系是线程–>进程–>程序的大致组成结构.所以线程是程序执行流的最小单位 ...
- SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——2.google-cartographer机器人SLAM建图
摘要 通过前面的基础学习,本章进入最为激动的机器人自主导航的学习.在前面的学习铺垫后,终于迎来了最大乐趣的时刻,就是赋予我们的miiboo机器人能自由行走的生命.本章将围绕机器人SLAM建图.导航避障 ...
- Android之Retrofit详解(转载)
说明:该文章转载于https://www.jianshu.com/p/a3e162261ab6 前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下 ...
- SQL Server查看索引重建、重组索引进度
相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道索引重建的进度,这个对于DBA完全是一个黑盒子,对于系统负载非常大的系统或维护窗口较短的系统,你会遇到一些挑战 ...
- Luogu P5279 [ZJOI2019]麻将
ZJOI2019神题,间接送我退役的神题233 考场上由于T2写挂去写爆搜的时候已经没多少时间了,所以就写挂了233 这里不多废话直接开始讲正解吧,我们把算法分成两部分 1.建一个"胡牌自动 ...
- 使用清华开源镜像安装tensorflow
安装tensorflow时,如果使用直接安装速度相对较慢,采取清华大学的镜像会提高速度.GPU版本安装方法:pip install tensorflow-gpu==1.8 -i https://pyp ...