首先看到ArrayList是泛型类,可以任意指定类型的数据。
ArrayList的最大好处就是动态,可以不必关心数组空间的大小。
上面的代码中:
for (int num : arr)的语法可以这样理解:
“:”前的元素,元素的类型必须与ArrayList的泛型一致(不要忘了自动装箱和拆箱,基本数据类型例如int和它的封装类例如Integer之间可以直接转换);这个元素就是后面数组或List中的每一个元素,而且是按照下标顺序从前往后取得的。
ArrayList内部使用的是“动态数组”。
LinkedList内部使用的是“链表”。
根据这两点不同,我们可以根据实际使用情况进行更优的选择:
程序中基本没有数据的插入和删除,主要是查找的话,那么,ArrayList的效率更好;反之,LinkedList的效率更好。
除此之外,二者的功能基本相似。
ArrayList和LinkedList类都是泛型类,这使得这两个“容器”真的是“大肚能容”,可以方便的存储任何类型数据。
package com.mec.study; import java.util.LinkedList; public class AboutArrayList { public static void main(String[] args) { LinkedList<Complex> complelist = new LinkedList<>(); complelist.add(new Complex(1,2)); complelist.add(new Complex()); complelist.add(new Complex(1)); complelist.add(new Complex(3,4)); complelist.add(new Complex(1,1)); for (Complex complex : complelist) { System.out.println(complex); } } } —————————————————————————————————————————————————————————————————————————————————— complex{a=1, b=2} complex{a=0, b=0} complex{a=1, b=0} complex{a=3, b=4} complex{a=1, b=1}对象名.indexOf();
Complex c = new Complex(3,4); int index = complelist.indexOf(c); System.out.println(index); ———————————————————————————————————————————————————————————————————————————————————————— 3输出结果为3,是List中下标为3 的第4个元素。
注意:无论我们是否在Complex类中是否覆盖equals()方法,indexOf()方法都会自动调用equals()方法进行“相等”判断。
但是,在没有覆盖equals()方法的时候,调用的是Object类原始的equals()方法,其比较的是对象的直接值(即 地址值)
对象名.contains();返回值为boolean类型。
package com.mec.study; import java.util.LinkedList; public class AboutArrayList { public static void main(String[] args) { LinkedList<Complex> complelist = new LinkedList<>(); complelist.add(new Complex(1,2)); complelist.add(new Complex()); complelist.add(new Complex(1)); complelist.add(new Complex(3,4)); complelist.add(new Complex(1,1)); Complex c = new Complex(3,4); System.out.println(complelist.contains(c)); System.out.println(complelist.contains(new Complex(2,5))); } } ———————————————————————————————————————————————————————————————————————————————— true false
