close

HashSet:不會排序,在集合內,隨機找一空位填上,執行速度較快
TreeSet:會排序,在集合內,找最後空位填上,執行速度較慢
以上,若相同元素都會被覆蓋掉,Set接口Set不允許包含相同的元素,如果試圖把兩個相同元素加入同一個集合中,add方法返回false。
Set判斷兩個對象相同不是使用==運算符,而是根據equals方法。


EX:


         Set<Integer> set = new HashSet<>();    //不會排序    
         for(int i = 0;i < 100 ;i++)
            set.add(i);
         for(Integer i : set)
             System.out.print(" " +i);
         
        System.out.println("");
        
        Set<Integer> set2 = new TreeSet<>();    //會排序
        for(int i = 0;i<100;i++)
            set2.add(i);
        for(Integer i : set2)
            System.out.print(" " +i);
Out:

.....93 92 95 94 89 88 91 90 98 99 96 97

.....88 89 90 91 92 93 94 95 96 97 98 99


EX:

        Set<Integer> set = new HashSet<>();
       long start =  System.currentTimeMillis();
       for(int i = 0;i< 10_0000;i++)
           set.add(i);
        System.out.println((System.currentTimeMillis() - start ));
        
        Set<Integer> set2 = new TreeSet<>();
        long start2 = System.currentTimeMillis();
        for(int i = 0;i< 10_0000;i++)
            set2.add(i);
        System.out.println(System.currentTimeMillis() - start2  );

Out:

22       //花費時間較少
38       //花費時間較多


PS: 使用大寫字母A,B,C,D,......X,Y,Z定義的,就是泛型,把T換成A也一樣,這裡T只是名字上的意義而已

●    ?                             :     表示不確定的java類型

●    T(type)                    :     表示具體的一個java類別

●    K V (key value)    :     分別表示java鍵值中的key value

●    E(Element)               :     表示元件

※建立可排序的物件Comparable<T>:

public class Employee implements Comparable<Employee>{

    private int ID;
    private String Name;

    @Override                                                                         //不Overide會compiler fail
    public int compareTo(Sales o) {
    //return this.getID() - o.getID();                                       //以ID排序,小到大
        return this.getName().compareTo(o.getName());      //以Name排序
    }

    @Override                                                                        //Overide Object裡面的方法
    public String toString() {
        return "ID:" + this.getID() + " Name:" + this.getName();
    }

    public Employee(){}
    public Employee(int ID,String Name){
    this.ID = ID;
     this.Name = Name;
    }

    public int getID(){return ID;}
    public String getName(){return Name;}

}
//----------------------------------------------------
import java.util.Set;
import java.util.TreeSet;
public class Main{
    public static void main(String[] args){
        Set<Employee> set  = new TreeSet<>();        //若以HashSet並不會排序
        set.add(new Employee(1,"xxx"));                     
        set.add(new Employee(2,"xx"));                      
        set.add(new Employee(3,"xxxx"));
        set.add(new Employee(4,"x"));
        System.out.println(set);
    }
}

Out:
    [ID:4 Name:x, ID:2 Name:xx, ID:1 Name:xxx, ID:3 Name:xxxx]

※ TreeSet: 若相同key不會被覆蓋,若相同內容值會被覆蓋

※HashSet: 若相同key不會被覆蓋,若相同內容值不會被覆蓋


        Map map = new HashMap();           //相同內容不會被覆蓋,TreeMap也一樣
        map.put(1,"Michael");
        map.put(2,"Michael");
        System.out.println(map);
        
        Map map1 = new HashMap();       //相同key會被覆蓋最後一筆,TreeMap也一樣
        map1.put(1,"Michae");
        map1.put(1,"Michael");
        System.out.println(map1);

Out:

{1=Michael, 2=Michael}
{1=Michael}


  堆疊寫法:

       Deque<String> stack = new ArrayDeque<>();
        stack.push("one");
        stack.push("two");
        stack.push("three");
        
        int size = stack.size() -1;
        while (size >= 0){
            System.out.println(stack.pop());
            size --;
        }

Out:

three
two
one

arrow
arrow
    創作者介紹
    創作者 淺翔 的頭像
    淺翔

    翔の學習淺談

    淺翔 發表在 痞客邦 留言(0) 人氣()