看完了集合后,自己对集合的整理:
Collection接口
|-- List(子接口) 元素是有序的,且可重复
|-- Vector(实现类) 可以实现可增长的对象数组。和 ArrayList基本相同,但是 Vector是JDK1.0版本,线程同步的,效率低,已被 ArrayLis取代。
|-- ArrayList(实现类)数据结构为数组就够。线程不同步,效率高。查询速度快,但是插入,删除效率低;
|-- LinkedList(实现类)存储数据结构为线性表。线程不同步,效率高。查询速度慢,但是插入,删除效率高;
|--(子接口)元素无序,且不可重复
|-- HashSet(实现类)存储数据结构为哈希表。
|-- TreeSet(实现类)对Set集合进行排序。
注意:看到 Set集合是无序的,但是它的实现类TreeSet为什么能排序?
这是因为 List所说的有序,是存储的顺序和元素增加顺序相同;
Set集合是无序,指的是存储顺序和元素的增加顺序可能不相同;(注意:是可能不同,当然也可能相同)。
Collection: 取出全部元素的方法:iterator()迭代器方法,对集合元素的遍历,判断是否有下一个元素hasNext(),获取 next()
List: 特有方法。凡是可以操作角标的方法都是该体系特有的方法;
List中的listIterator()方法:
即用Iterator类的iterator()方法只能用三个方法,有局限性。在获取元素是只能用迭代器的方法,只有三个hasNext(),next()和remove(),即对集合除了取出之外,只能做删 除操作。为了能更多操作,list集合使用了Iterator接口的子接口ListIterator。
ArrayList:和List基本一样
LinkedList: 特有方法,addFirst().addLast(),getFirst().getLast(),removeFirst().removeLast();
注:,removeFirst().removeLast();这两个方法和别的移除方法不一样,在移除前先返回移除的元素
在新版本中出现了 peekFirst(),peekLast(),方法获得但不删除第一个/最后一个元素,如空则返回null
pollFirst(),pollLast(),方法获得并删除元素,如空则返回null
Set:
HashSet:比较元素相同分两步:第一步,比较元素的哈希值(调用hashCode()方法)
第二步,比较该元素对象是否相同,调用equals()方法
存储元素事先比较元素的哈希值和集合中的元素哈希值是否相同,不同,则存储。
如果哈希值相同,则比较这两个哈希值相同元素是否相同,如果不同,则把该对象放在该哈希值延伸处,如果相同,则出现重复元素,不存储;
TreeSet:可以给Set集合的元素排序,但是前提是存放的对象必须具备比较性;
让对象具备比较性有两种方法:(1,元素自身具备比较性,2,集合具备比较性)
1:实现Comparable接口,覆盖compareTo(Object obj)方法。这个接口强制对象具备比较性。
注意:如果判断主要条件相同时,一定要判断次要条件;
2:当对象不具备比较性,或需求改变了,不需要原来比较的条件,换一个比较条件,为了不在源代码里修改。
这样就出现了第二种比较方式:让集合具备比较性,即在集合初始化时就有了比较方式;
方法:定义了比较器,把比较器对象作为参数传个TreeSet的构造方法;
怎样定义比较器:
定义一个类,该类实现了Compator接口,需要覆盖compare(Object obj1,Object obj2)方法;
注意:当两种比较方式都存在是,以比较器为主; |
|