相同点:List和Set都属于单列集合,即都是Collection的子接口
不同点:
* List:
* List集合允许出现重复元素,所有元素是以线性方式进行
* 存储的,可以通过索引的方式访问指定元素。另外,List集合还有
* 元素有序的特点,即存入和取出的顺序一致。
* ArrayList内部封装了一个可变长度的数组,即其数据结构为
* 数组(50%增加)。故而其特点是查询快,增删慢
* LinkedList内部为一个双向循环链表,每一个元素都以引用的
* 方式来记住他的前一个和后一个元素。其特点是查询慢,增删快。
* Set:
* 与List不同,Set接口中的元素是无序的,并且都会以某种规则
* 保证存入的元素不出现重复。其主要实现类为:HashSet和TreeSet
* HashSet查重方式为:每添加一个元素,首先调用该对象的
* hashCode()方法,确定元素的存储位置,然后调用对象的equals()
* 方法,来确保该位置没有重复元素。使用时一般要自己重写两个方法。
* TreeSet内部采用自平衡二叉树的结构。既可以保证没有重复元素
* 也能对元素进行排序。因为TreeSet要对元素进行排序,所以必须要
* 保证元素具有可比性。使元素具有可比性的方法有两种:
* 1.实现Comparable接口,重写其中的compareTo方法
* 2.通过自定义比较器的方式,为集合添加比较的功能。
* class MyComparator implements Comparator
* 需要在创建集合时传入自定义的比较器:
* TreeSet ts = new TreeSet(new MyComparator());
|
|