1. List

1. List特点

  • 元素有序,可重复。
  • 我们主要学习三种:ArrayListVectorLinkedList
  • 这三种都是List接口的实现类,使用上完全一样,只是实现原理不同,效率不同。
    List集合判断元素是否相同,依据是元素的equals方法。

1.2 ArrayList

  • 底层数组实现
  • 查找快,增删慢
  • 线程不安全

1.3 Vector

  • ArrayList基本一样
  • 线程安全(线程同步),效率低

1.4 LinkedList

  • 底层链表实现
  • 增删块,查找慢
  1. LinkedList:特有方法:

    • addFirst();
    • addLast();
    • getFirst();
    • getLast();
    • 获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
    • removeFirst();
    • removeLast();
    • 获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
  2. 在JDK1.6出现了替代方法。

    • offerFirst();
    • offerLast();
    • peekFirst();
    • peekLast();
    • 获取元素,但不删除元素。如果集合中没有元素,会返回null。
    • pollFirst();
    • pollLast();
    • 获取元素,但是元素被删除。如果集合中没有元素,会返回null。

1.5 存取元素

  • List集合元素存取方法一致
  • 使用add()方法增加元素
  • 由于List集合有序,可以使用get()方法获取元素
  • 元素的迭代(Iterator)
    • 通过集合对象的iterator()方法获得迭代器Iterator
    • 通过Iterator迭代器的hasNext()方法判断是否存在下一个元素
    • 通过Iterator迭代器的next()方法获取下一个元素
  • 元素的迭代(Enumeration)
    • 迭代Vector集合中的元素可以使用Enumeration
    • 通过EnumerationhasMoreElements()方法判断是否还有元素
    • 通过EnumerationnextElement()方法返回下一个元素
1
2
3
4
5
6
Collection
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--Set:元素是无序,元素不可以重复。、

List:
​ 特有方法。凡是可以操作角标的方法都是该体系特有的方法。

  • add(index,element);
  • addAll(index,Collection);

  • remove(index);

  • set(index,element);
  • get(index):
  • subList(from,to);
  • listIterator();
  • int indexOf(obj):获取指定元素的位置。
  • ListIterator listIterator();

List集合特有的迭代器。ListIteratorIterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator

该接口只能通过List集合的listIterator方法获取。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*Collection  容器:存储对象的对象
* Set
* ArrayList:有顺序,可重复,底层实现用数组实现的存储,特点:查询效率高,增删除
* 效率低,thread不安全.但是一般使用ArrayList
* 数组长度是有限的,而ArrayList是可以存放任意数量的对象,长度不受限制
* */
public class ArrayListTest {


public static void main(String[] args) {
List<String> list=new ArrayList<String>(-1);

}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*Collection  容器:存储对象的对象
* Set
* LinkedList:底层用双向链表实现的存储.特点:查询效率低,增删效率高,thread不安全.
* */
public class LinkedListTest {
public static void main(String[] args) {
LinkedList<Object> list = new LinkedList<>();
list.add(0,"wo");
list.add(1,1);
list.add(2,'a');
System.out.println(list.get(2));
for (Object o:list
) {
System.out.println(o);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*Collection  容器:存储对象的对象
* Set
* Vector:底层是用数组实现的List,和ArrayList底层实现一样,相关的方法都加的同步检查 synchronized
* 因此 thread安全,效率低
* */
public class VectorTest {

public static void main(String[] args) {
List<String> list=new Vector<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
for (String l:list
) {
System.out.println(l);
}
}
}