java.util.Collection是集合类的一个顶级接口,它提供了操作集合对象的通用接口方法,包含了集合的基本操作和属性,直接继承接口有List与Set。
List
List接口及其实现类是容量可变的列表,可按索引访问集合中的元素。
特点:集合中的元素有序、可重复;
List接口一共有三个实现类,分别是ArrayList、LinkedList和Vector。
1.ArrayList ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。它和Vector本质上都可以看做是一个可以自动增长容量的数组,即当数组长度不够的时候,会定义一个更大的数组,并把之前的数组拷贝到新的数组里面,但是ArrayList和Vector的扩展数组的大小不同。
当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动,代价较高。因此,它适合随机查找和遍历,不适合插入和删除。
它提供的功能类似Vector类但是它不支持线程的同步。
ArrayList操作
添加:
List list = new ArrayList();
list.add("咩");
list.add(0,"咩");
list.addAll(new ArrayList());
查询:
list.get(0);
list.size();
list.subList(0,2);
list.toArray();
list.toArray(T[] a);
list.hashCode();
list.indexOf("咩");
list.lastIndexOf("咩");
list.contains("咩");
list.containsAll(new ArrayList());
list.equals(new ArrayList());
list.isEmpty();
更新:
list.clear();
list.remove(0);
list.remove("咩");
list.removeAll(new ArrayList());
list.set(0,"咩");
遍历:
List list = new ArrayList();
list.add("咩");
list.add("喵");
Iterator<String> item = list.iterator();
while (item.hasNext()) {
String str = item.next();
System.out.println(str);
}
2.LinkedList LinkedList是用链表结构存储数据的,适合数据元素的动态插入和删除,随机访问和遍历速度比较慢。它提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
LinkedList操作
List linkList = new LinkedList();
list.add("咩");
list.add("喵");
ListIterator linkItem = linkList.listIterator();
while (linkItem.hasNext()) {
String str = linkItem.next();
System.out.println(str);
}
3.Vector Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性。
Vector在内存不够时默认是扩展1倍,ArrayList默认是扩展50% + 1个。 Vector提供indexOf(obj,start)接口,ArrayList没有。 Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。
Set
Set是一个不允许有重复元素的集合。
Set的实现类有HastSet和TreeSet。HashSet依赖于HashMap,实际上通过HashMap实现,是无序的;TreeSet依赖于TreeMap,实际上通过TreeMap实现,是有序的。
特点:集合中的元素不按特定方式排序,只是简单的把对象加入集合中。对Set中成员的访问和操作是通过Set中对象的引用进行的,所以集合中不能有重复对象。
1.HastSet Set集合中元素都必须是唯一的,HashSet作为其子类也需保证元素的唯一性。
元素唯一性是通过元素的hashCode和equals方法来判断的: 1) 如果对象的hashCode值不同,那么不用调用equals方法就会将对象直接存储到集合中; 2) 如果对象的hashCode值相同,那么需调用equals方法判断返回值是否为true。若为true, 则视为相同元素,不会存储。若为false,则视为不同元素,会直接存储。
如果要使用HashSet存储元素,该元素的类必须覆盖hashCode方法和equals方法。
HashSet主要方法
add(Object)
addAll(Collection)
remove(object)
removeAll(Collection)
size()
iterator()
toArray()
clear()
isEmpty()
contain(object)
containAll(Collection)
2.TreeSet TreeSet是一个有序集合,可以按照任何顺序将元素插入该集合,当对该集合进行迭代时,各个值将自动以排序后的顺序出现。TreeSet中的元素按照升序排列,缺省是按照自然顺序进行排序,意味着TreeSet中的元素要实现Comparable接口,或者有一个自定义的比较器Comparator。
TreeSet与HashSet的区别在于,TreeSet会自动按自然排序法给元素排序,即1排在2前,a排在b前,但是HashSet是根据元素的hashCode自动给元素排序的.如果我们不需要使用排序功能,应该使用HashSet,因为其性能优于TreeSet。 (编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|