1. ArrayList集合
class="java" name="code">
ArrayList集合
add()方法,接收的是对象,不能放置原生数据类型,可以在指定的索引插入元素
get()方法
isEmpty()方法
remove()方法,将删除的值返回,如果需要可以获取到
clear()方法,清空集合
indexOf()方法,查询索引值
toArray()方法,接收数组时要强制转换成对应的类型,不能将Object[]转换为Integer[]。所以要在遍历数组的时候将Object类型转换成Ingeter类型。
1. ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组。
2. 如果增加的元素个数超过了10个,那么ArrayList底层会新生成一个数组,长度为原数组的 1.5倍+1,然后将原数组的内容复制到新数组当中,并且后续增加的内容都会放到新数组当中。当新数组无法容纳增加的元素时,重复该过程。
3. 集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中。
4. 集合当中放置的都是Object类型,因此取出来的也是Object类型,那么必须要使用强制类型转换将其转换为真正的类型(放置进去的类型)。
import java.util.ArrayList;
public class ArrayListTest2{
public static void main(String[] args){
ArrayList list = new ArrayList();
list.add("hello");
list.add(new Integer(2));
String str = (String)list.get(0);
Integer in = (Integer)list.get(1);
System.out.println(str);
System.out.println(in.intValue());
}
}
运行结果:
hello
2
2. LinkedList集合
LinkedList集合
add()方法
addLast()方法
addFirst()方法
addLast()方法
remove()方法
set()方法
import java.util.LinkedList;
public class LinkedListTest {
public static void main(String[] args){
LinkedList list = new LinkedList();
list.add("F");
list.add("B");
list.add("D");
list.add("E");
list.add("C");
list.addLast("Z");
list.addFirst("A");
list.add(1, "A2");
System.out.println("最初的集合:" + list);
list.remove("F");
list.remove(2);
System.out.println("变化之后的集合:" + list);
Object value = list.get(2);
list.set(2, (String)value + "changed");
System.out.println("最后的集合:" + list);
}
}
运行结果:
最初的集合:[A, A2, F, B, D, E, C, Z]
变化之后的集合:[A, A2, D, E, C, Z]
最后的集合:[A, A2, Dchanged, E, C, Z]
3. ArrayList和LinkedList比较
1. ArrayList是实现了基于动态数组的数据结构,LinkedList是基于双向链表结构。
2. 对于随机访问的get和set方法,ArrayList要优于LinkedList,因为LinkedList要移动指针。
3. 对于新增和caozuo.html" target="_blank">删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
4. 对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。
对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;
对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。
5. 在ArrayList集合中添加或者删除一个元素时,当前的列表所所有的元素都会被移动。而LinkedList集合中添加或者删除一个元素的开销是固定的。
6. LinkedList集合不支持高效的随机随机访问(RandomAccess),因为可能产生二次项的行为。
7. ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。