ArrayList和LinkedList
1、Arraylist使用示例:
package com.mec.study;
import java.util.ArrayList;
public class AboutArrayList {
public static void main(String[] args) {
//初始化ArrayList对象array
ArrayList<Integer> array = new ArrayList<>();
//增加一个int数值10
array.add(10);
//增加一个int数值20
array.add(20);
//取得下标为1的第二个数值
int num = array.get(1);
System.out.println(num);
}
}
首先看到ArrayList是泛型类,可以任意指定类型的数据。
ArrayList的最大好处就是动态,可以不必关心数组空间的大小。
2、ArrayList遍历代码示例:
package com.mec.study;
import java.util.ArrayList;
public class AboutArrayList {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
ArrayList<Integer> arr = new ArrayList<>();
for (int i = 0; i < a.length; i++) {
arr.add(a[i]);
}
for (int num : arr) {
System.out.println(num);
}
}
}
上面的代码中:
for (int num : arr)的语法可以这样理解:
“:”前的元素,元素的类型必须与ArrayList的泛型一致(不要忘了自动装箱和拆箱,基本数据类型例如int和它的封装类例如Integer之间可以直接转换);这个元素就是后面数组或List中的每一个元素,而且是按照下标顺序从前往后取得的。
3、使用LinkedList的代码几乎与ArrayList一致,但也要留心二者差别:
ArrayList内部使用的是“动态数组”。
LinkedList内部使用的是“链表”。
根据这两点不同,我们可以根据实际使用情况进行更优的选择:
程序中基本没有数据的插入和删除,主要是查找的话,那么,ArrayList的效率更好;反之,LinkedList的效率更好。
除此之外,二者的功能基本相似。
4、泛型体现的好处
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}
5、元素定位的方法
对象名.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()方法,其比较的是对象的直接值(即 地址值)
5、判断元素存在的方法
对象名.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