标签:
http://www.blogjava.net/EvanLiu/archive/2007/11/12/159884.html 集合继承关系图
Collection是一个超级接口,有很多实现这个接口的类。具体用的话,是用这些实现它的那些类,比如ArrayList等,ArrayList是比较常用的。
Collection 也属于容器,容器的话,一般避免不了“增删改查”这四个操作!
iterator
所有实现Collection接口容器类都有一个iterator方法用以返回一个实现iterator接口对象
iterator对象称迭代器,方便对实现对容器内元素的遍历操作。
set
set集合不忍许加入两个相同得元素,同时比较得时候是通过equals方法来比较。
(==比较的是2个对象的地址,而equals比较的是2个对象的内容)
hashset
hashset是set接口得典型实现,大多说时候使用set集合时都是使用这个实现类,
hashset按hash算法来存储集合中的元素,因此具有很好的存储和查找性能。
hashset具有一下特点:
不能保证元素得排列顺序
hashset不是线程安全的
集合元素可以使用null
存入元素得时候根据hansCode的值决定该对象在hashset中存储的位置(所以不能保证元素得储存位置)。如果equals的值相同,但是hashCode不同,还是可以把它存在不同的位置。
LinkedHashSet
LinkedHashSet是hashSet的子类
LinkedHashSet集合根据元素的hashCode值来决定元素得存储位置,同时使用链表维护元素得次序,这使得元素看起来是以插入的顺序保存的,
LinkedHashSet的插入稍微低于hashset但是迭代访问得set里的全部元素时有很好得性能。
LinkedHashSet不容许集合元素重复。
TreeSet时SortedSet接口的实现类,TreeSet可以确保集合处于排序状态。
treeSet支持两种排序方法,自然排序和定制排序,默认得情况下,TreeSet采用自然排序。
* 如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口
* 在类上implement Comparable
* 重写compareTo()方法
* 在方法内定义比较算法, 根据大小关系, 返回正数负数或零
* 在使用TreeSet存储对象的时候, add()方法内部就会自动调用compareTo()方法进行比较, 根据比较结果使用二叉树形式进行存储
*/
import java.util.Iterator; import java.util.*; public class TreeSetTest { public static void main(String[] args) { Set ts = new TreeSet(); ts.add("abc"); ts.add("xyz"); ts.add("rst"); Iterator it = ts.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
输出结果:
abc
rst
xyz
打印结果不是和先前加入的顺序一样,它是按照一个字母的排序法进行排序的。这是因为String 类实现了Comparable接口。
如果我们自己定义的一个类的对象要加入到TreeSet当中,那么这个类必须要实现Comparable接口。
package test.treeset; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class test_treeset { @SuppressWarnings("unchecked") public static void main(String[] args) { Set ts = new TreeSet(); ts.add(new Teacher("zhangsan", 1)); ts.add(new Teacher("lisi", 2)); ts.add(new Teacher("wangmazi", 3)); ts.add(new Teacher("wangwu",4)); ts.add(new Teacher("mazi", 3)); Iterator it = ts.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } } class Teacher implements Comparable { int num; String name; Teacher(String name, int num) { this.num = num; this.name = name; } public String toString() { return "学号:" + num + "\t\t姓名:" + name; } //o中存放时的红黑二叉树中的节点,从根节点开始比较 public int compareTo(Object o) { Teacher ss = (Teacher) o; int result = num < ss.num ? 1 : (num == ss.num ? 0 : -1);//降序 //int result = num > ss.num ? 1 : (num == ss.num ? 0 : -1);//升序 if (result == 0) { result = name.compareTo(ss.name); } return result; } }
运行结果:
学号:4 姓名:wangwu
学号:3 姓名:mazi
学号:3 姓名:wangmazi
学号:2 姓名:lisi
学号:1 姓名:zhangsan
List
代表一个元素有序,且可重复得集合,集合中的每个元素都有其对应的顺序索引默认按照元素得添加顺序设置元素得索引。
arrayList和Vector是list接口得两个典型得实现,
通常建议使用arraylist。
arraylist时线程不安全得,而vector时线程安全的
标签:
原文地址:http://my.oschina.net/u/2480757/blog/514865