Set接口的定义
Collection就不能进行双向输出,因为没有提供get()方法,但是Set接口与Collection接口的定义一致,所以其本身也不能双向输出。
HashSet:使用散列的方式存放内容,本身没有顺序。
import java.util.HashSet ;
import java.util.Set ;
public class HashSetDemo01{
public static void main(String args[]){
Set<String> allSet = new HashSet<String>() ;
allSet.add("A") ; // 增加内容
allSet.add("B") ; // 增加内容
allSet.add("C") ; // 增加内容
allSet.add("C") ; // 重复内容
allSet.add("C") ; // 重复内容
allSet.add("D") ; // 增加内容
allSet.add("E") ; // 增加内容
System.out.println(allSet) ;
}
};
执行结果中可以看出插入的顺序是无序排列的,而List接口的内同插入的顺序是其保存的顺序。
如果现在希望所有的内容可以自动进行排序的操作,则可以使用Set中的第二个子类————TreeSet.
import java.util.TreeSet ;
import java.util.Set ;
public class TreeSetDemo01{
public static void main(String args[]){
Set<String> allSet = new TreeSet<String>() ;
allSet.add("C") ; // 增加内容
allSet.add("C") ; // 重复内容
allSet.add("C") ; // 重复内容
allSet.add("D") ; // 增加内容
allSet.add("B") ; // 增加内容
allSet.add("A") ; // 增加内容
allSet.add("E") ; // 增加内容
System.out.println(allSet) ;
}
};
TreeSet类的内容是可以排序的,那么任意给出一个类,观察能否进行排序。
import java.util.Set ;
import java.util.TreeSet ;
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
};
public class TreeSetDemo02{
public static void main(String args[]){
Set<Person> allSet = new TreeSet<Person>() ;
allSet.add(new Person("张三",30)) ;
allSet.add(new Person("李四",31)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("赵六",33)) ;
allSet.add(new Person("孙七",33)) ;
System.out.println(allSet) ;
}
};
import java.util.Set ;
import java.util.TreeSet ;
class Person implements Comparable<Person>{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
public int compareTo(Person per){
if(this.age>per.age){
return 1 ;
}else if(this.age<per.age){
return -1 ;
}else{
return 0 ;
}
}
};
public class TreeSetDemo03{
public static void main(String args[]){
Set<Person> allSet = new TreeSet<Person>() ;
allSet.add(new Person("张三",30)) ;
allSet.add(new Person("李四",31)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("赵六",33)) ;
allSet.add(new Person("孙七",33)) ;
System.out.println(allSet) ;
}
};
import java.util.Set ;
import java.util.TreeSet ;
class Person implements Comparable<Person>{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
public int compareTo(Person per){
if(this.age>per.age){
return 1 ;
}else if(this.age<per.age){
return -1 ;
}else{
return this.name.compareTo(per.name) ; // 调用String中的compareTo()方法
}
}
};
public class TreeSetDemo04{
public static void main(String args[]){
Set<Person> allSet = new TreeSet<Person>() ;
allSet.add(new Person("张三",30)) ;
allSet.add(new Person("李四",31)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("赵六",33)) ;
allSet.add(new Person("孙七",33)) ;
System.out.println(allSet) ;
}
};
此时去掉的重复元素并不是真正意义上的重复元素的取消。
import java.util.Set ;
import java.util.HashSet ;
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
};
public class RepeatDemo01{
public static void main(String args[]){
Set<Person> allSet = new HashSet<Person>() ;
allSet.add(new Person("张三",30)) ;
allSet.add(new Person("李四",31)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("赵六",33)) ;
allSet.add(new Person("孙七",33)) ;
System.out.println(allSet) ;
}
};
import java.util.Set ;
import java.util.HashSet ;
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public boolean equals(Object obj){ // 覆写equals,完成对象比较
if(this==obj){
return true ;
}
if(!(obj instanceof Person)){
return false ;
}
Person p = (Person)obj ; // 向下转型
if(this.name.equals(p.name)&&this.age==p.age){
return true ;
}else{
return false ;
}
}
public int hashCode(){
return this.name.hashCode() * this.age ; // 定义一个公式
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
};
public class RepeatDemo02{
public static void main(String args[]){
Set<Person> allSet = new HashSet<Person>() ;
allSet.add(new Person("张三",30)) ;
allSet.add(new Person("李四",31)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("赵六",33)) ;
allSet.add(new Person("孙七",33)) ;
System.out.println(allSet) ;
}
};
SortedSet接口:
import java.util.SortedSet ;
import java.util.TreeSet ;
public class TreeSetDemo05{
public static void main(String args[]){
SortedSet<String> allSet = new TreeSet<String>() ; //
allSet.add("A") ; // 增加内容
allSet.add("B") ; // 增加内容
allSet.add("C") ; // 增加内容
allSet.add("C") ; // 增加内容
allSet.add("C") ; // 增加内容
allSet.add("D") ; // 增加内容
allSet.add("E") ; // 增加内容
System.out.println("第一个元素:" + allSet.first()) ;
System.out.println("最后一个元素:" + allSet.last()) ;
System.out.println("headSet元素:" + allSet.headSet("C")) ;
System.out.println("tailSet元素:" + allSet.tailSet("C")) ;
System.out.println("subSet元素:" + allSet.subSet("B","D")) ;
}
};