1. 程式人生 > >List Set Map

List Set Map

-c trees font 1.2 區別 method stat ret 重要

【註:以下內容大部分摘自李興華老師的Java筆記】

1.List本身屬於一個接口,要想取得接口的實例化對象,那麽應該通過子類實例化接口,它有兩個常用子類:

ArrayList【數組實現,查詢快,增刪慢,線程不安全,輕量級】、 Vector【數組實現,線程安全,重量級 】。

  1.1 List接口中,get()方法非常重要

List<String>all=new ArrayList<String>();
all.add("hello");//List是有序列表,允許存放重復的元素
all.add("hello");
all.add("world";)
for(int x=0;x<all.size();x++){
    String str
=all.get(x); Sysout.out.println(str); }

  1.2 List接口中提供有contains()、remove()的操作方法,這兩個方法都需要實現equals()方法

public class TestList {
    public static void main(String[] args) {
        List<Dept>list=new ArrayList<Dept>();
        list.add(new Dept(10,"財務部","Beijing"));
        list.add(new
Dept(20,"技術部","Shenzhen")); list.add(new Dept(30,"財務部","HongKong")); list.remove(new Dept(30,"財務部","HongKong")); for(int x=0;x<list.size();x++){ Dept d=list.get(x); System.out.println(d); } } } class Dept{ private int dno; private String dep;
private String loc; public Dept(int dno,String dep,String loc){ this.dno=dno; this.dep=dep; this.loc=loc; } @Override //如果沒有覆寫equals操作,將刪除(第8行)不了。 public boolean equals(Object obj) { // TODO Auto-generated method stub if(this==obj)return true; if(obj==null)return false; if(!(obj instanceof Dept))return false; Dept dept=(Dept)obj; return this.dno==dept.dno&&this.dep.equals(dept.dep)&&this.loc.equals(dept.loc); } @Override public String toString() { // TODO Auto-generated method stub return "編號"+this.dno+" 部門:"+this.dep+" 地點:"+this.loc; } }

  1.3 一個面試題:ArrayList與Vector的區別

技術分享

  1.4 LinkedList是一個真正的鏈表實現類,其功能比ArrayList更加豐富,但大部分使用不到。(附一張重要的圖)

技術分享

  2. Set是Collection的一個接口,裏面的數據不允許出現重復,允許使用null。它有兩個重要的子類,HashSet(無序)、TreeSet(有序)。一般使用HashSet。

只要在java中牽扯到一組對象的比較操作永遠都使用Comparable接口來完成。

public class TestTreeSet {
    public static void main(String[] args) {
        Set<Person>set=new TreeSet<Person>();
        set.add(new Person("wa",20));
        set.add(new Person("xi",10));
        set.add(new Person("li",10));
        System.out.println(set);
    }
}
class Person implements Comparable<Person>{
    private int age;
    private String name;
    public Person(String name,int age){
        this.age=age;
        this.name=name;    
    }
    @Override
    /*
     * 當年齡相同時,後面的對象會覆蓋掉前面的。所以compareTo()方法不能像之前那樣寫
     * return this.age-o.age;
     */
    public int compareTo(Person o){
        if(this.age>o.age)return 1;
        if(this.age<o.age)return -1;
        else
            return this.name.compareTo(o.name);
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "名字:"+this.name+" 年齡:"+this.age;
    }
}

  2.2 關於重復元素的說明

對於使用Comparable消除重復元素,只適合於TreeXxx類型的集合。大部分類型的集合,消除重復元素是利用Object類中的兩個方法來完成。

取得hash碼: public int hashCode()

對象比較:public boolean equals(Object obj)

(PS:知道即可,開發中很少使用。)

List Set Map