List集合须知

tech2023-03-03  139

List集合须知

一.必会常用方法:

1. 增:add(Object obj); 2. 删:(List中的)remove(int index) / (Connection中的)remove(Object obj); 3. 改:set(int index, Object obj); 4. 查:get(int index); 5. 插:add(int index, Object obj); 6. 长度:size(); 7. 遍历:Iterator迭代器 /增强for循环(模板举例为for(Person person:persons));

二.补充方法:

1. int indexOf(Object obj):返回obj在集合中首次出现的位置,如果不存在,返回-1; 2. int lastIndexOf(Object obj):返回obj在集合中最后出现的位置,如果不存在,返回-1; 3. List subList(int fromIndex, int toIndex):返回子集合,包括fromIndex,不包括toIndex; 4.

三.理解ArrayList和LinkedList的优劣:

1. ArrayList插入、删除操作效率差,因为底层是用Object[]数组存储的。例如在长度10000的数组中插入一个元素,则由于数组的特性,在该插入点之后的元素一直到10000处的元素都要后退一位才行,所以效率差。但却适合随机访问元素;

2. LinkedList随机访问其中的元素效率差,因为其底层用双向链表存储,链表不具备数组的索引直接访问特点,需要遍历到访问处,所以效率差。但却适合插入和删除操作;

四.Iterator遍历易错点和纠正;

错误方式一(举例):

Collection coll = new ArrayList(); coll.add(12); coll.add(22); coll.add(32); coll.add(42); Iterator iterator = coll.iterator(); while((iterator.next())!=null) { System.out.println(iterator.next()); }

以上结果为22,42,说明:next()方法在一次循环中用了两次,会导致结果间隔输出;

错误方式二(举例):

Collection coll = new ArrayList(); coll.add(12); coll.add(22); coll.add(32); coll.add(42); while(coll.iterator().hasNext()) { System.out.println(coll.iterator().next()); }

以上结果无限重复输出第一个元素,说明:集合对象每次调用iterator()方法都得到一个全新的迭代器对象,并且默认游标指在集合的第一个元素之前;

正确方式:

Collection coll = new ArrayList(); coll.add(12); coll.add(22); coll.add(32); coll.add(42); Iterator iterator = coll.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); }

注意小点: 1.Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove(),而不是集合对象的remove(); 2.如果还未调用next()或在上一次调用next()之后已经调用了remove(),此时连续再调用remove()会报错; 3.数组转换为集合:

List list = Arrays.asList(//数组);

错误方式(举例):

List list = Arrays.asList(new int[] {11,22});

以上输出结果为[[I@15db9742],说明:输出时是将list看作一个整体,所以结果不是11,22;

正确方法: 1.将其上的int改为integer; 2.直接在括号内填数据,如

List list = Arrays.asList(11,22);
最新回复(0)