标签:
●迭代是取出集合中元素的一种方式。
●因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
●用法:
第一种
for (iterator iter=iterator(); iter.hasNext();) //老外比较喜欢用这种,省内存(iter的内存),开发时用这个 { System.out.println(iter.next()); }
第二种
Iterator iter = l.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); }
●迭代器在Collection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。
●迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。
●迭代器的next方法返回值类型是Object,所以要记得类型转换。
Collection接口有两个子接口:List(列表),Set(集)
List:可以存放重复元素,元素存取是有序的(存入和取出的顺序一致)。
Set:不可以存放重复元素,元素存取是无序的。
List特有的常见方法:有一个共同特点就是都可以操作角标。
1、添加
void add(int index , E element);
void add(int index , Collection<? extends E> c);
boolean addAll(int index , Collection<? extends E> c);
1 import java.util.ArrayList; 2 3 public class Test { 4 5 public static void main(String[] args) { 6 ArrayList al = new ArrayList(); 7 al.add("dfsdf"); 8 al.add("ere"); 9 al.add("fgf"); 10 11 ArrayList a2 = new ArrayList(); 12 a2.add("dfsdf"); 13 a2.add("ere"); 14 a2.add("fgf"); 15 16 17 al.addAll(1, a2); 18 19 System.out.println(al); 20 21 al.add(1, a2); 22 System.out.println(al); 23 24 } 25 26 }
2、删除:
E remove(int index);
3、修改:
E set(int index, E element);
4、获取:
E get(int index);
int indexOf(Object o);
int lastIndexOf(Object o);
List subList(from , to); //不包尾
List集合是可以完成对元素的增删改查。
Vector:内部是数组数据结构,是同步的。增删,查询都很慢。
ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
LinkedList:内部是链表数据结构,是不同步的,增删元素的速度很快。
void addFirst(E e);
void addLast(E e);
jdk1.6
boolean offerFirst(E e);
boolean offerLast(E e);
E getFirst(); //获取但不移除,如果链表为空,抛出NoSuchElementException
E getLast();
jdk1.6
E peekFirst(); //获取但不移除,如果链表为空,返回null。
E peekLast();
E removeFirst(); //获取但不移除,如果链表为空,抛出NoSuchElementException
E removeLast();
jdk1.6
E pollFirst(); //获取但不移除,如果链表为空,返回null。
E pollLast();
元素不可以重复,是无序的。
Set接口中的方法和Collection一致。
内部数据结构是哈希表,是不同步的。
如何保证集合的元素唯一性呢?
是通过对象的hashCode和equals方法来完成对象的唯一性的。
如果对象hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。
一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖hashCode,equals方法。
可以对Set集合中的元素进行排序,是不同步的。
判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖ComparaTo方法。
如果不要按照对象中具备的自然顺序进行排序,如果对象中不具备自然排序,怎么办?
那就使用方式二。
方式二:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。
将该对象作为参数传递给TreeSet集合的构造函数。
需要唯一性吗?
需要:Set
需要制定顺序吗?
需要:TreeSet
不需要:HashSet
但是想要一个和存储一致的顺序(有序):LinkedHashSet
不需要:List
需要频繁增删吗?
需要:LinkedList
不需要:ArrayList
如何记住每一个容器的结构和所属体系呢?
看名字!!!
List
--ArrayList
--LinkedList
Set
--HashSet
--TreeSet
后缀名就是该集合所属的体系。
前缀名就是该集合的数据结构。
看到array:就要想到数组,就要想到查询快,有角标。
看到link:就要想到链表,就要想到增删快,就要想到 add/get/remove + First/Last的方法。
看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashCode和equals方法。
看到tree:就要想到二叉树,就要想到排序,就要想到两个接口Comparable,Comparator。
而且通常这些常用的集合容器都是不同步的。
标签:
原文地址:http://www.cnblogs.com/Newbie-Cai/p/5793951.html