为什么写List<String> list=new ArrayList<String>();而不写ArrayList<String> arrayList = new ArrayList<>();?

List<String> list=new ArrayList<String>();的核心是遵守了依赖倒转原则——细节依赖于抽象。

ArrayList是实现了List这个接口的,将这个问题放大来看就是一个接口引用指向了一个实现了该接口的类的对象,这就和继承中的一个父类引用指向了它的子类对象相似。

这个样子的写法的好处是确保了list只能调用在List中已经定义过的方法,而不会调用到ArrayList新创建的方法,若是写为ArrayList<String> arrayList = new ArrayList<>();则有可能调用到ArrayList<E>新创建的方法.

这个样子的写法还有一个好处:如果原本写的是ArrayList<E>但实际是要使用LinkedList<E>,那么只要把ArrayList<E>改为LinkedList<E>就可以了,后面关于list的调用的代码是不会发生错误的,但如果一开始写为ArrayList<String> arrayList = new ArrayList<>();而又需要改为使用LinkedList<E>,那么关于arrayList的调用代码可能是会出错的——可能使用到了ArrayList<E>独有的方法。这样子一来,如果一开是创建为List<String> list=new ArrayList<>();,后面即使要修改代码也会省时间一些。

原文地址:https://www.cnblogs.com/woyujiezhen/p/11456725.html

时间: 2024-10-12 02:53:22

为什么写List<String> list=new ArrayList<String>();而不写ArrayList<String> arrayList = new ArrayList<>();?的相关文章

SONObjetc和String Map Bean互转,JSONArray和String List互转

1 import java.util.ArrayList; 2 import java.util.HashMap; 3 import java.util.List; 4 import java.util.Map; 5 6 import com.alibaba.fastjson.JSONArray; 7 import com.alibaba.fastjson.JSONObject; 8 9 10 public class JSONParse { 11 12 public static void m

String源码分析之Java中的String为什么是不可变的以及replace方法源码分析

什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象的引用 对于Java初学者, 对于String是不可变对象总是存有疑惑.看下面代码: String s = "ABCabc";

string类的两种实现方法及string的一些成员函数的实现

string的第一种实现方法: #include<iostream> using namespace std; class String { public:      String(char *str="")//构造函数       :_str(new char[strlen(str)+1])      {           strcpy(_str, str);      }      String(const String& str)//拷贝构造函数,实现深拷贝

synchroized String object 时使用guava的interner代替String.intern()

synchroized代码块, 直接使用String作为lock的时候,不会起作用 此时可已使用String.intern()作为代替, 但String.intern()的缺陷是 如果字符串特别多,导致放入字符串池的String不可控,有可能导致OOM错误或者过多的Full GC 具体参考这里 http://stackoverflow.com/questions/10578984/what-is-string-interning/10579062#10579062 因此使用guava的Inter

为什么Java中的String是不可变的?(Why String is immutable o...

There are many reasons due to the string class has been made immutable in Java. These reasons in view, concurrency issues, security issues and performance issues. Here is a list of various valid reasons to go for immutable string class: String在Java中被

2.6 使用String不一定创建对象 2.7使用new String一定创建对象

2.6 使用String不一定创建对象 在执行到双引号包含字符串的语句时,如String a = "123"; JVM先会到常量池里查找,如果有的话返回常量池里的这个实例的引用,否则的话创建一个新实例并置入常量池里.所以,当我们在使用诸如String str = "abc";的格式定义对象时,总是想当然的认为,创建了String类的对象str.担心陷阱!对象可能并没有被创建!而可能是指向一个先前已经创建的对象.只是通过new()方法才能保证每次都创建一个新的对象.

自己写ORM框架 DBUtils_DG Java(C#的写在链接里)

ORM框架想必大家都比较熟知了,即对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”. 当你开发一个应用程序的时候(不使用O/R MAPPING),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等. 现在流行的ORM框架有: JAVA系列:APACHE OJB,C

磁盘IO单线程顺序写时最快的,如果多线程写,磁盘的磁头要不断重新寻址,所以写入速度反而会慢

(1) 读写最好还是不要多线程,硬盘读写的速度有限,单线程时已经满负荷了,多线程又会增加线程之间的切换,会增加时间. 如果想增加读写速度,应该增加硬盘,做raid (2)首先是硬盘的写入是串行的,CPU的计算才是并行的,如果你偏重计算那么多线程能提高,要不怎么叫做并行计算呢: 如果侧重存储,除非数据量达到足以体现优势的程度,否则加上线程之间切换的损耗当然会效率更加地下. (3)这个是按照算法来说的,目前来说大多数的算法都是很快的,瓶颈都在磁盘的IO上,我们针对大多数的算法都进行过测试,基本一半以

C语言代写,C语言作业代写,代写C语言,C语言编程代写

C语言代写,C语言作业代写,代写C语言,C语言编程代写 我是一线IT企业程序员,目前接各种代码代写业务: 代写C语言.代做C语言.C语言作业代写.C语言代写 代写C++.代做C++.C++作业代写.C++作业代写 代写Python.代做Python.Python作业代写.Python作业代做 代写Java.代做Java.Java作业代写.Java作业代做 代写编程作业.代做编程.编程代写.编程代做 先写代码再给钱,不要任何定金!价钱公道,具体见图,诚信第一!(涉及图形化界面.或领域类知识如金融数

当我在写程序的时候,我究竟在写些什么?

当我写下标题之后,面对着一张白板,发现不知道要写什么.或许我还没准备好这个主题.一个村上春树式的标题,或许是因为我想表达得蓝调一些,那么就还是写一写,就当是怀旧吧. 记得大学时,同学们都在用VC6写C++程序,而我为了标新,用Cygwin下的vim写,后来干脆在自己的JOY BOOK 3000上安装了一个Fedora 5,用着那个被修改成半透明的Console下的vim,感觉很爽的样子.现在想来,如果一个人写C++不用IDE,那不是装X就是傻X. 大学时,我们的专业课没有Java,不过我买了一本