java instantiation,Instantiation of List (Java)

动机

今天刷Leetcode时碰到的一道问题(216. Combination Sum III):

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

给出的function signature为:

public List> combinationSum3(int k, int n) {

}

注意此处返回type为List of List

一开始我傻傻中招(Java知识太不扎实),直接用

List> ls = new List>();

来创建ls,结果报错:List是interface

这个问题我已多次犯过,每次都不长记性,归根结底是自己基础知识不扎实造成的重复性错误。因此我把本文当作知识点记录,来加深对Java List interface及其引申类的理解。

1. 如何实例化(instantiate)List?

当一个class A implements(实现)了一个interface B,那么A和B就有了is-a的关系,及我们可以用:此处A应为concrete class

B obj = new A();

来实现B的实例化。

注意:A obj = new B()是错误的

那么有哪些classes implement了Java List interface呢?参考Oracle提供的documentation,其中比较常用的有:

ArrayList 和 LinkedList

所以实例化时我们可以用:

List ls1 = new ArrayList();

List ls2 = new LinkedList();

注意,ls只可以调用List所有的函数,而不可以调用ArrayList或LinkedList中的(List interface没有定义)的函数。下面的函数调用会引起compiler error:

ls2.addFirst(e);

如果我们想要调用concrete class A中另外的函数,我们需要类型为A的引用。ArrayList和LinkedList都提供了方便的转换方法:

ArrayList arrayLs = new ArrayList(ls1);

LinkedList linkedLs = new LinkedList(ls2);

若我们想要完成ls2.addFirst(e),我们可以使用:

linkedLs.addFirst(e);

ls2 = linkedLs;

来达到同样的效果。

2. 如何实例化List of List

在完成了以上的搜索后,再来看如何实例化List>,这里我犯了第二个错误:

List> ls = new ArrayList>();

这是错误的,引起compiler error:cannot convert ArrayList> to List>

为什么不能用B obj = new A()呢?这里和generic type有关,此处有比较详细的解释。总体来说,A和B不是is-a的关系。

如下才是正确的方法:

List> ls = new ArrayList>();

在这里,List可以出现在右侧,因为它是以数据类型的形式出现,而不是以Constructor的形式出现。

当我们需要进一步在ls中添加List时,只需要根据1中的例子,来实例化List即可

3. 实现List的类之间的比较(ArrayList, LinkedList, Stack, Vector)

//TODO

最后分享一下本题我的答案:

public class Solution {

public List> combinationSum3(int k, int n) {

List> rtLs = new LinkedList<>();

if(k <=0 || (n / k) < lvl) return rtLs;

if(k == 1 && n >= lvl && n <= 9) {

LinkedList ls = new LinkedList();

ls.add(n);

rtLs.add(ls);

return rtLs;

}

for(int i = lvl; i < 10; i++) {

if(i > n) break;

lvl = i+1;

List> shorterLs = combinationSum3(k-1, n-i);

for(List ls : shorterLs) {

LinkedList als = new LinkedList(ls);

als.addFirst(i);

rtLs.add(als);

}

}

lvl = 1;

return rtLs;

}

private static int lvl = 1;

}

本题容易产生歧义的地方是a unique set of numbers,其中unique比较容易理解,即不可有顺序不同数字相同的重复解,而set这个条件比较容易被忽略,应理解为每个解中的数字只可出现一次,如[3,3,3]就不是n=3, k=9的解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础练习题(二)

Linux基础练习题(二) 1、复制/etc/skel目录为/home/tuer1&#xff0c;要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [rootwww ~]# cp -r /etc/skel/ /home/tuser1 [rootwww ~]# chmod -R 600 /home/tuser1/ 2、编辑/etc/group文件&#xff0c;添加组hado…

java 多线程写缓存,Java多线程_缓存对齐

1.什么是缓存对齐当前的电脑中&#xff0c;数据存储在磁盘上&#xff0c;可以断电保存&#xff0c;但是读取效率较低。不断电的情况下&#xff0c;数据可以在内存中存储&#xff0c;相对硬盘效率差不多是磁盘的一万倍左右。但是运算时&#xff0c;速度最快的是直接缓存在CPU中的…

ArcGIS Server SOE开发之奇怪异常:

添加之后结果显示如下:fjsontokenezkBvir0Tj5q31UEst7pTFPwrwocmHklCajKeh-xXM91qWdBXDuQMmtGcaHaaXCJ 具体如下: 该SOE扩展在另一台机器上测试时可以正常添加,不知道为什么,在此台机器上添加时就出现如下异常. 请教群里大神,大神建议换个浏览器试试,换成IE在添加扩展,竟然成功…

netbeans7.4_NetBeans 7.2引入了TestNG

netbeans7.4代码生成的优点之一是能够查看如何使用特定的语言功能或框架。 正如我在《 NetBeans 7.2 beta&#xff1a;更快&#xff0c;更有用》一文中所讨论的那样&#xff0c; NetBeans 7.2 beta提供了TestNG集成 。 除了对该功能的单一引用之外&#xff0c;我在该帖子中没有…

java.net.noroute,java.net.NoRouteToHostException: No route to host

今天重装了服务器的系统之后&#xff0c;重新在两台服务器布署es集群之后&#xff0c;发现es启动报错&#xff1a;[2015-06-16 10:33:33,455][WARN ][transport.netty ] [ElasticSearch_01] exception caught on transport layer [[id: 0x10560167]], closing connect…

2016年成功的Java开发人员简介

2015年即将结束。 现在是时候总结过去一年做了什么和没有做什么的时候了。 此外&#xff0c;现在是预测下一个2016年的好时机。 您已经猜到这篇文章是关于2016年理想的Java开发人员的。 我想给你一个惊喜&#xff0c;这次我更改了预测的格​​式。 为了使预测更非个人化&#…

Laravel 清空配置缓存

清空配置缓存 php artisan cache:clear php artisan config:clear 转载于:https://www.cnblogs.com/fsong/p/6230644.html

matlab ssgs工具箱,基于PI控制方式的1A开关电源MATLAB仿真研究

基于 PI 控制方式的 1A 开关电源 MATLAB 仿真研究学院&#xff1a;电气与光电工程学院专业&#xff1a;电气工程及其自动化班级&#xff1a;基于 PI 控制方式的 1A 开关电源 MATLAB 仿真研究0目录0 绪论 --------------------------------------------------------------------…

禁用导航栏的右滑返回实现全屏手势返回

今天发现项目中push 的也面的右滑都无法pop 查阅相关资料发现 导航栏右滑手势失效基本有两种情况 1&#xff1b; self.navigationController.interactivePopGestureRecognizer.enabled NO;这个 interactivePopGestureRecognizer手势是控制系统导航右滑返回的关键&#xff0c;让…

猿圈php,路飞学城-学习文档

性能管理介绍CPU性能管理磁盘性能管理网络性能管理内存性能管理性能管理介绍操作系统对硬件资源统一管理&#xff0c;并把资源分配给各个APP使用&#xff0c;资源的使用情况直接影响到程序运行的速度&#xff0c;如果资源使用过高&#xff0c;甚至会造成服务器宕机&#xff0c;…

spring roo_使用Spring Roo进行快速云开发–第1部分:Google App Engine(GAE)

spring rooSpring Roo是在Java平台上提供快速应用程序开发的工具。 我已经解释了何时使用它&#xff1a; http : //www.kai-waehner.de/blog/2011/04/05/when-to-use-spring-roo 。 Spring Roo目前支持两种针对云计算的解决方案&#xff1a;Google App Engine&#xff08;GAE&a…

requests高级用法

会话对象 当你向同一主机发送多个请求时&#xff0c;session会重用底层的tcp连接&#xff0c;从而提升性能&#xff0c;同时session也会为所有请求保持 cookie。 #!/usr/bin/env python # -*- coding:utf-8 -*- # __author__:kzg import requestss requests.Session() # 此地址…

怎样恢复oracle函数,Oracle闪回恢复误删除的表、存储过程、包、函数...

在日常的数据库开发过程汇总难免会出现一些误删除的动作,对于一些误删的操作我们可以通过oracle提供的闪回机制恢复误删数据,从而避免出现较大的生产事故.下面是本人平时工作中积累的一些常用的操作,非常简单实用&#xff0c;分享给大家.恢复dml误删的数据&#xff1a;select *…

Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计

Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计 1.1. software development methodology (also known as SDM 1 1.2. 历史1 1.3. 常见方法2 1.4. DDD Domain Drive Design&#xff0c;也就是领域驱动开发。2 1.5. Tdd TDD&#xff08;测试驱动开发(Test-Driven Developm…

jOOQ API设计缺陷的奇怪发生

jOOQ是一种内部领域特定语言&#xff08;DSL&#xff09; &#xff0c;它以Java&#xff08;宿主语言&#xff09;建模SQL语言&#xff08;外部DSL&#xff09;。 这篇热门文章描述了jOOQ API的主要机制&#xff1a; Java Fluent API设计器速成课程 。 任何人都可以根据该文章…

精馏塔matlab,MATLAB图解精馏塔理论塔板数程序代码

《MATLAB图解精馏塔理论塔板数程序代码》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《MATLAB图解精馏塔理论塔板数程序代码(6页珍藏版)》请在人人文库网上搜索。1、MATLAB图解精馏塔理论塔板数程序代码function distillation %文件名“distillation”可以更改% 输入…

c# 衍生类和基类的构造顺序

public class MyDeriveClass:MyBaseClass{public MyDeriveClass():base(){}int derive_int 1;}public class MyBaseClass{public MyBaseClass(){}int base_int 1;} var cls new MyDeriveClass(); 调用顺序如下: derive_int 1;base_int 1;MyBaseClass(); MyDeriveClass();…

oracle unused用法,set unused的用法(ORACLE刪除字段)

set unused的用法(ORACLE刪除字段)一、問題現場有一張大數據量的分區表&#xff0c;數據量在10G以上。因某種原因需要刪除其中的某些字段。如果直接用alter table1 drop (column1,column2);或者alter table1 drop column column1;和alter table1 drop column column2;的話&…

java 计算协方差_Java的深度:通过协方差暴露的API泄漏

java 计算协方差Java有时可能非常棘手&#xff0c;特别是在API设计中。 让我们看一个非常有趣的展示柜。 jOOQ强烈地将API与实现分开。 所有API都在org.jooq包中&#xff0c;并且是公共的。 大多数实现是在org.jooq.impl包和package-private中。 只有工厂和一些专用的基础实现是…

shell启动oracle客户端,Shell实现的Oracle启动脚本分享

Usage: sh oracled [start|stop|restart] SIDs 其中SIDs是数据库名&#xff0c;多个名称之间用逗号分隔。缺省的操作是 restart &#xff0c;也可以指定需要进行的操作( start | stop | restart )#!/bin/shcmdname"restart"# get oracle sid information from env by…