- 根接口Collection
常用子接口
?1. List
??實現(xiàn)類:ArrayList放棒、Vector痰催、LinkedList
?2. Set
??實現(xiàn)類:HashSet兜辞、TreeSet
List
ArrayList:底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,效率高陨囊,用于查詢弦疮,線程不安全(size會變,復(fù)合操作不具有原子性)
LinkedList:底層數(shù)據(jù)結(jié)構(gòu)是鏈表蜘醋,用于插入和刪除胁塞,線程不安全
Vector:底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,線程安全 压语,實際使用還是要加鎖啸罢,一般不用。Set:無序胎食,元素唯一不能重復(fù)扰才。
hashSet:
- 底層數(shù)據(jù)是哈希表
- 通過兩個方法hashCode()和equals()保證元素的唯一性,方法自動生成
- 子類LinkedHashSet底層數(shù)據(jù)結(jié)構(gòu)是鏈表和哈希表厕怜,由鏈表保證元素有序衩匣,由哈希表保證元素唯一蕾总。
使用場景:使用HashSet類隨機產(chǎn)生10個不重復(fù)的1到20的不重復(fù)隨機數(shù)實例
package test_11_hashset;
import java.util.HashSet;
import java.util.Random;
//使用HashSet類隨機產(chǎn)生10個不重復(fù)的1到20的不重復(fù)隨機數(shù)
public class HashSetDemo {
public static void main(String[] args) {
Random r=new Random();
HashSet <Integer> hs=new HashSet<Integer>();
while(hs.size()<10) {
hs.add((r.nextInt(20)+1));
}
for(Integer i:hs) {
System.out.println(i);
}
}
}
treeSet:
- 底層數(shù)據(jù)是紅黑二叉樹
- 排序方式:自然排序、比較器排序
- 通過比較返回值是否為0來保證元素的唯一性琅捏。
使用場景:TreeSet類中自然排序和比較器排序?qū)嵗?br> Student類
package test11_Treeset;
//此處實現(xiàn)的為自然排序接口生百,如果僅僅使用比較器排序此接口可以不實現(xiàn)
public class Student implements Comparable<Student>{
private int age;
private String name;
public Student() {
super();
}
public Student(String name,int age) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int compareTo(Student s) {
//此處的this和s前后位置改變會影響排序方式
int num1=this.age-s.age;
int num2=num1==0?this.name.compareTo(s.name):num1;
return num2;
}
}
1、自然排序
package test11_Treeset;
import java.util.TreeSet;
//TreeSet類存儲對象柄延,自然排序
//規(guī)定:按照年齡進行排序
public class TreeSetDemo1 {
public static void main(String[] args) {
TreeSet<Student> ts=new TreeSet<Student>();
Student s1=new Student("zfliu",18);
Student s2=new Student("zfliu",20);
Student s3=new Student("zfliu",18);
Student s4=new Student("ZFLIU",18);
Student s5=new Student("Java",18);
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
for (Student s:ts) {
System.out.println(s.getName()+s.getAge());
}
}
}
2蚀浆、比較器排序
package test11_Treeset;
import java.util.Comparator;
import java.util.TreeSet;
//TreeSet類存儲對象,比較器排序
//規(guī)定:按照年齡進行排序
public class TreeSetDemo2 {
public static void main(String[] args) {
TreeSet<Student> ts=new TreeSet<Student>(new Comparator<Student>() {
//匿名內(nèi)部類實現(xiàn)比較器排序接口
public int compare(Student s1, Student s2) {
int num1=s1.getAge()-s2.getAge();
int num2=num1==0? s1.getName().compareTo(s2.getName()):num1;
return num2;
}
});
Student s1=new Student("zfliu",18);
Student s2=new Student("zfliu",20);
Student s3=new Student("zfliu",18);
Student s4=new Student("ZFLIU",18);
Student s5=new Student("Java",18);
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
for (Student s:ts) {
System.out.println(s.getName()+s.getAge());
}
}
}