java集合體系--Collecion的各種子介面、實現類(上)
Collection集合體系
Map體系
●Java集合大致分為Set、List、Queue、Map四種體系。
●最常用的集合:HashSet、TreeSet、ArrayList、ArrayDeque、LinkedList、TreeMap
●Iterator介面也是Java集合框架的成員,但它與Collection系列,Map系列的集合不一樣:Collection、Map系列集合主要用於盛裝其他物件,而Iterator則主要用於遍歷Collection集合中的元素,
Iterator物件也被稱為迭代器。
HashSet
當向HashSet集合中存入一個元素時,HashSet會呼叫該物件的hashCode()方法來得到該物件的hashCode值,然後根據hashCode值決定該物件在HashSet中的儲存位置。
HashSet集合判斷兩個元素相等的標準是兩個物件通過equals()方法比較相等,並且兩個物件的hashCode()方法返回值也相等。
具體的方法參見API文件,這裡就不展示了。
HashSet去重的原理:1.hashCode,2.equals是否相同
可以通過覆寫hashCode和equals方法改變其去重規則,進行自定義去重
TreeSet
與HashSet相比,TreeSet多了幾個額外的方法
因為TreeSet中的元素是有序的,所以增加了訪問第一個、前一個、後一個、最後一個元素的方法,並且提供了從三個TreeSet中擷取子TreeSet的方法。
TreeSet加入元素時,必須加入同類型的物件,否則會發生
方法測試:
@Test
public void TreeSetTest(){
TreeSet ts=new TreeSet();
ts.add(2);
ts.add(5);
ts.add(-8);
ts.add(10);
System.out.println(ts);
System.out.println(ts.first());//輸出-8
System.out.println(ts.last());//輸出10
System.out.println(ts.headSet(5));//返回小於5的子集,不包含5,輸出[-8,2]
System.out.println(ts.tailSet(5));//返回大於5的子集,如果Set中有5,子集也包含5,輸出[5,10]
System.out.println(ts.subSet(-8,5));//返回值包括前面不包括後面,輸出[-8, 2]
}
其他測試:
@Test
public void TreeSetAddObjTest(){
TreeSet ts=new TreeSet();
ts.add(5);
ts.add("hello");
System.out.println(ts);
}
測試結果:
如果加入的是實體物件,比如Student,則Student類必須實現Comparable介面,並重寫compareTo()方法,
(這也時TreeSet去重的原理!!!)
Student類有姓名、年齡、性別三個屬性,省略程式碼為get/set方法,如下:
public class Student implements Comparable{
@Override
public int compareTo(Object o) {
Student s= (Student) o;
return getAge()>s.getAge()?1:getAge()<s.getAge()?-1:0;
}
}
標紅程式碼表示:可以根據需要改變排序規則,這裡是升序排列。
@Test
public void TreeSetAddObjTest(){
TreeSet ts=new TreeSet();
Student stu1=new Student("張三",23,"男");
Student stu2=new Student("zone",21,"男");
Student stu3=new Student("小鋂",22,"女");
ts.add(stu1);
ts.add(stu2);
ts.add(stu3);
System.out.println(ts);
for(Object o:ts){
Student stu= (Student) o;
System.out.println(stu.getName()+"的年齡"+stu.getAge());
}
}
測試結果:
原文出自:https://my.csdn.net/qq_37094660(如需轉載請註明出處)