List Set Map
阿新 • • 發佈:2017-10-01
-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(newDept(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