如果我想把这个实现从ArrayList
更改为LinkedList
,我只需要更改
ArrayList<Character> characters = new ArrayList<Character>();
LinkedList<Character> characters = new List<Character>();
我该怎么做呢?
ArrayList<Character> characters = new ArrayList<Character>();
try {
while((str = bufferedReader.readLine()) != null){
char [] characterArray = str.toCharArray();
for (int i = 0; i < characterArray.length; i++){
characters.add(characterArray[i]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
char [] patternArray = phrase.toCharArray();
ArrayList<Character> pattern = new ArrayList<Character>();
for (int i = 0; i < patternArray.length; i++) {
pattern.add(patternArray[i]);
}
这段代码很好地说明了为什么面向接口编程是一件好事。你继续使用这个声明模式:
ArrayList<Character> characters = new ArrayList<Character>();
如果您希望使characters
成为链表,您必须在两个地方进行更改。如果您使用接口名称作为声明,如
List<Character> characters = new ArrayList<Character>();
代码的其余部分将继续工作,但是您将能够进行单个更改以转换为LinkedList
:
List<Character> characters = new LinkedList<Character>();
同样适用于pattern
变量的声明。
速度太慢,占用太多内存
当然有!长链表占用更多内存,因此将它们用于逐字符表示是不切实际的。通常,只有在处理少量短字符串时,将字符串转换为字符列表才实用。在其他情况下,最好使用String
对象,如果需要可变性,则使用StringBuilder
对象。