質問: new ArrayList()`という記述を見て後任者が「なるほどこのコードではListであれば何でもいいんだな。じゃあちょっと挿入処理したい所があるからLinkedListに変えよう」となったら記事にあるように激遅コードになってしまいます。 Listに限らず、インターフェイスによる宣言は「そのインターフェイスで実装されるメソッドはすべて同様の動作をする」ことが保証されない限り使うべきではないのではないでしょうか。 追記:英語版でも質問してみました
回答: 設計としてArrayListの機能を要求されるのであればArrayListにするべきだと思いますし、汎用的なメソッド的なものを想定しているのであればListにすればよいのではないのでしょうか。 一概にこうすべき、と断じれるものではないと思います。 設計には前提が必要であり、特に前提を定めないのであれば、可能な限り抽象化しておくのが理想ではないかなと個人的に思います。