关于java的基础---集合

来源:互联网 发布:搭建yum仓库 编辑:程序博客网 时间:2024/06/06 10:45
集合:Set集合:

Set集合是最为简单的一种集合,它不存储重复对象,集合中的元素不按特定方式排序

Set接口常见的两个实现类是HashSetTreeSetHashSet按照哈希算法来存取集合中的对     象,存取速度比较快。HashSet还有一个子类叫LinkedHashSet,它不仅实现了哈希算法,并且实现了链表结构,链表数据结构能提高数据的插入和删除元素的性能。而TreeSet实现了SortedSet接口,具有排序的功能!

LinkedHashSet集合:

LinkedHashSet按照元素插入的顺序进行迭代,即迭代输出的顺序与插入的顺序保持一致。

2LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet

 

  HashSet集合:

  特点:不能保证元素的排列顺序,顺序有可能发生变化

        不是同步的

        集合元素可以为null,但只能放入一个null

  HashSet集合中存入一个元素时,HashSet会调用该对象的HashCode()方法来获取该对象的HashCode值,然后根据HashCode值来决定该对象在HashSet中存储的位置。简单的说,HashSet集合判断两个元素相等的标准是通过equals方法比较相等,并且两个方法的HashCode()返回值相等。注意:如果把一个对象放入HashSet中,重写该对象对应类的equals方法,也应该重写其HashCode方法。其规则是如果两个对象通过equals方法比较返回true,其HashCode也应相同。另外,对象中用作equals比较标准的属性,都应该用来计算HashCode的值。

Tip 1:什么是HashCode

 官方定义:HashCode方法返回该对象的哈希值。支持该方法是为哈希表提供一些优点,例如java.util.HashTable提供的哈希表。

  1HashCode的存在主要是用于查找的快捷性,如HashSetHashTableHashMap等是用在散列存储结构中确定对象的内存地址的

  2:如果两个对象相同,就适用于equals方法,那么这两个对象的HashCode一定要相同。

  3:如果对象的equals方法被重写,那么对象的HashCode也要被重写,并且产生HashCode使用的对象,一定要和equals方法中使用的保持一致

  4两个对象的HashCode相同,并不代表两个对象相同,也就不一定适用equals方法。只能说明这两个对象在散列存储结构中,如HashTable,即它们在同一个篮子里

TreeSet集合:

TreeSet集合是SortedSet接口的唯一实现类,TreeSet集合可以确保集合元素处于排序状态。TreeSet集合存在两种排序1.自然排序2.定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。TreeSet集合判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0

自然排序:

自然排序使用排序元素的CompareTo方法来比较元素之间的大小关系,然后将元素按照升序排序。

JAVA定义了一个Comparable接口,该接口中定义了一个方法ComparedTo,该方法返回整数值,实现该方法即可排序

Obj1.ComparedTo(obj)==0 证明两个对象相等

Obj1.ComparedTo(obj)>0 证明Obj1大于obj

Obj1.ComparedTo(obj)<0 证明Obj大于obj1

定制排序:

实现Comparator接口,实现int compare(T o1,T o2)方法

List集合

List类型的特征是以线性的方式存储数据,集合中允许存放重复对象。List接口的实现类主要包括:

 

1ArrayList--------代表可变长度的数组,允许对元素进行快速的随机访问,但是向ArrayList中插入数据和删除数据的速度慢!

 

2LinkedList---------采用链表数据结构,对顺序访问进行了优化,向List中插入和删除的速度较快,随机访问速度较慢。随机访问是指检索于特定位置的元素。LinkedList单独具有addFirst()addLast()方法,以及removeFisrt()rmoveLast()方法。这些方法使得LinkedList可以作为堆栈,队列和双向队列使用。

单向链表:单向链表(单链表)是链表的一种,它由节点组成,每个节点都包含下一个节点的指针。

 

双向链表:双链表也是由节点组成,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

ollection类对于排序的静态方法有以下两个:

 

--1sort(List list)对集合中的对象进行自然排序

--2sort(List list,Comparator com)按照定制顺序排序

 ListIterator接口:

 

ListlistIterator()方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,此外还提供了专门操作列表的方法。

Map集合
List 和Set 实现的接口
Map没有

0 0