Java集合框架(Collections Framework)(5)

队列是先进先出FIFO的数据结构。封装的队列类MyQueue代码如下:

import java.util.*; class MyQueue { private LinkedList mylist; MyQueue() { mylist = new LinkedList(); } // add element to queue public void add(Object obj) { mylist.addFirst(obj); //Fisrt In } //get element from queue public Object get() { return mylist.removeLast(); //First Out } //queue is null? public boolean isNull() { return mylist.isEmpty(); } //the size of queue public int size() { return mylist.size(); } //remove element in queue by index public boolean remove(int index) { if(this.size()-1 < index) { throw new IndexOutOfBoundsException("index too large!"); } mylist.remove(index); return true; } //remove the first appearance element in queue by Object public boolean remove(Object obj) { return mylist.remove(obj); } public String toString() { return mylist.toString(); } }

操作该队列数据结构程序代码如下:

import java.util.*; public class FIFO { public static void main(String[] args) { MyQueue mq = new MyQueue(); mq.add("Malong1"); mq.add("Malong2"); mq.add("Malong3"); mq.add("Malong4"); //[Malong4,Malong3,Malong2,Malong1] System.out.println(mq.size()); //return:4 mq.remove(2); //[Malong4,Malong3,Malong1] mq.remove("Malong1"); //[Malong4,Malong3] System.out.println(mq); while (!mq.isNull()) { System.out.println(mq.get()); } } } Set接口

Set接口也实现了Collection接口。它既然能单独成类,它和List集合的数据结构一定是大有不同的。

Set接口的数据结构特性是:

1.Set集合中的元素无序。这里的无序是相对于List而言的,List的有序表示有下标Index的顺序,而Set无需是指没有index也就没有顺序。

2.Set集合中的元素不可重复。

3.因为无序,因此Set集合中取出元素的方法只有一种:迭代。

4.实现Set接口的两个常见类为:

(1).HashSet:hash表数据结构;

1).不同步;

2).查询速度快;

3).判断元素是否重复的唯一方法是:先调用hashcode()判断对象是否相同,相同者再调用equals()方法判断内容是否相同。所以,要将元素存储到此数据结构的集合中,必须重写hashcode()和equals()。

(2).TreeSet:二叉树数据结构;

1).二叉树是用来排序的,因此该集合中的元素是有序的。这个有序和List的有序概念不同,此处的有序指的是存储时对元素进行排序,例如按照字母顺序,数字大小顺序等,而非index索引顺序。

2).既然要排序,而equals()方法只能判断是否相等。因此数据存储到TreeSet集合中时需要能够判断大小。

3).有两种方法用于构造有序的TreeSet集合:

a.待存储对象的类实现Comparable接口并重写它的compareTo()方法;

b.在构造TreeSet集合时指定一个比较器comparator。这个比较器需要实现Comparator接口并重写compare()方法。

(3).LinkedHashSet:链表形式的HashSet,仅在HashSet上添加了链表索引。因此此类集合有序(Linked)、查询速度快(HashSet)。不过很少使用该集合类型。

HashSet集合

HashSet的用法没什么可解释的,方法都继承自Set再继承自Collection。需要说明的是它的无序性、不可重复性、计算hash值时的方法以及判断重复性时的方法。

import java.util.*; public class TestHashSet { public static void main(String[] args) { Set s = new HashSet(); s.add("abcd4"); s.add("abcd1"); s.add("abcd2"); s.add("abcd3"); s.add("abcd1"); //重复 for (Iterator it = s.iterator();it.hasNext();) { Object obj = it.next(); System.out.println(obj); } } }

得到的结果是无序且元素是不可重复的:

abcd2 abcd3 abcd4 abcd1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/349b058e608364c69d6a7c8d05332c22.html