1. 程式人生 > >遍歷HashSet與TreeSet與java的集合框架

遍歷HashSet與TreeSet與java的集合框架

   物件儲存在HashSet之前,要先確保物件重寫equals()和hashCode()方法,這樣才能比較物件的值是否相等,以確保set中沒有儲存相等的物件。如果我們沒有重寫這兩個方法,將會使用這個方法的預設實現。

Set的遍歷

Set<String> set = new HashSet<>();

        set.add("11111");
        set.add("22222");
        set.add("33333");
        set.add("44444");
        set.add("22222");

        System.out.println(set.size());

        for (String e : set) {
            System.out.println(e);
        }

HashSet的遍歷

	public static void main(String[] args) {
		/**
		 * 1,HashSet是無序的
		 * 2,不允許存在重複的值
		 */
		HashSet<String> hs=new HashSet<String>();
		hs.add("232");
		hs.add("21");
		hs.add("222");
		hs.add("333");
		hs.add("21");
		
		Iterator<String> it=hs.iterator();
		while(it.hasNext()){
			String s=it.next();
			System.out.println(s);
		}
	}

    TreeSete的遍歷

TreeSet<Integer> set = new TreeSet<>();

        set.add(1111);
        set.add(2222);
        set.add(3333);
        set.add(4444);
        set.add(5555);

        System.out.println(set.first()); // 輸出第一個元素
        System.out.println(set.lower(3333)); //小於3333的最大元素
        System.out.println(set.higher(2222)); //大於2222的最大元素
        System.out.println(set.floor(3333)); //不大於3333的最大元素
        System.out.println(set.ceiling(3333)); //不小於3333的最大元素

        System.out.println(set.pollFirst()); //刪除第一個元素
        System.out.println(set.pollLast()); //刪除最後一個元素
        System.out.println(set);

    Java集合框架主要包括兩種型別的容器,一種是集合(Collection),儲存一個元素集合,另一種是圖(Map),儲存鍵/值對對映。Collection介面又有3種子型別,List、Set和Queue再下面是一些抽象類,最後是具體實現類,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等等。

    collection框架有自己的介面和實現,主要分為Set介面,List介面和Queue介面。它們有各自的特點,Set的集合裡不允許物件有重複的值,無序的,List允許有重複,有順序的,它對集合中的物件進行索引,Queue的工作原理是FCFS演算法(First Come, First Serve)。

Collection介面中的全部方法。

有幾個比較常用的方法,比如方法add()新增一個元素到集合中,addAll()將指定集合中的所有元素新增到集合中,contains()方法檢測集合中是否包含指定的元素,toArray()方法返回一個表示集合的陣列。

// 將指定的元素插入此列表中的指定位置。
		arrayList.add(1,"小張三");
		pringArrayList(arrayList);
		// 用指定的元素替代此列表中指定位置上的元素。
		arrayList.set(2, "小李四");
		pringArrayList(arrayList);
		// 移除此列表中指定位置上的元素。
		arrayList.remove(0);
	printLinkedList(linkedList);
		// 返回此列表中首次出現的指定元素的索引,如果此列表中不包含該元素,則返回 -1。
		System.out.println(linkedList.indexOf("李四"));
		printLinkedList(linkedList);
		// 獲取但不移除此列表的第一個元素;如果此列表為空,則返回 null。
		System.out.println(linkedList.peekFirst());
		printLinkedList(linkedList);
		// 獲取但不移除此列表的最後一個元素;如果此列表為空,則返回 null。
		System.out.println(linkedList.peekLast());
		printLinkedList(linkedList);
		// 獲取並移除此列表的第一個元素;如果此列表為空,則返回 null。
		System.out.println(linkedList.pollFirst());
		printLinkedList(linkedList);
		// 獲取並移除此列表的最後一個元素;如果此列表為空,則返回 null。
		System.out.println(linkedList.pollLast());
		printLinkedList(linkedList);

ArrayList

ArrayList是用陣列儲存元素的,這個陣列可以動態建立,如果元素個數超過了陣列的容量,那麼就建立一個更大的新陣列,並將當前陣列中的所有元素都複製到新陣列中

LinkedList是在一個連結串列中儲存元素。

連結串列和陣列的最大區別在於它們對元素的儲存方式的不同導致它們在對資料進行不同操作時的效率不同,同樣,ArrayList與LinkedList也是如此,實際使用中我們需要根據特定的需求選用合適的類,如果除了在末尾外不能在其他位置插入或者刪除元素,那麼ArrayList效率更高,如果需要經常插入或者刪除元素,就選擇LinkedList。

Queue

佇列是一種先進先出的資料結構,元素在佇列末尾新增,在佇列頭部刪除。Queue介面擴充套件自Collection,並提供插入、提取、檢驗等操作。

方法offer表示向佇列新增一個元素,poll()與remove()方法都是移除佇列頭部的元素,兩者的區別在於如果佇列為空,那麼poll()返回的是null,而remove()會丟擲一個異常。方法element()與peek()主要是獲取頭部元素,不刪除。