List和Set
看结果 得出 LinkedList是无序的、可重复元素
而set它已经排序好了,且不能重复
package com.binglian.collection;
import java.util.LinkedList;
import java.util.TreeSet;
public class DuplicateAndOrderTest {
public static void main(String[] args){
LinkedList linkedList=new LinkedList();
linkedList.add("111");
linkedList.add("333");
linkedList.add("222");
linkedList.add("444");
linkedList.add("555");
linkedList.add("111");
System.out.println(linkedList);
TreeSet treeSet=new TreeSet();
treeSet.add("111");
treeSet.add("333");
treeSet.add("222");
treeSet.add("444");
treeSet.add("555");
treeSet.add("111");
System.out.println(treeSet);
}
}
首先看下实现Comparable的方法
需要重写 equals compareTo hashCode
相对较麻烦 这里是升序、如果要自己要降序 改下1返回1 或者-1就可以
@Override
public boolean equals(Object object){
if(this == object)
return true;
if(!(object instanceof Customer))
return false;
final Customer other=(Customer) object;
if(this.name.equals(other.getName()) && this.age==other.getAge())
return true;
else
return false;
}
public int compareTo(Object object){
Customer other =(Customer) object;
//先按照name属性排序
if(this.name.compareTo(other.getName())>0)
return 1;
if(this.name.compareTo(other.getName())<0)
return -1;
//在按照age属性排序
if(this.age >other.getAge())
return 1;
if(this.age < other.getAge())
return -1;
return 0;
}
@Override
public int hashCode(){
int result;
result =(name==null?0:name.hashCode());
result= 29 * result+age;
return result;
}
package com.binglian.collection;
import java.util.Set;
import java.util.TreeSet;
public class Customer implements Comparable{
private String name;
private int age;
public Customer(String name,int age){
this.age=age;
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object object){
if(this == object)
return true;
if(!(object instanceof Customer))
return false;
final Customer other=(Customer) object;
if(this.name.equals(other.getName()) && this.age==other.getAge())
return true;
else
return false;
}
public int compareTo(Object object){
Customer other =(Customer) object;
//先按照name属性排序
if(this.name.compareTo(other.getName())>0)
return 1;
if(this.name.compareTo(other.getName())<0)
return -1;
//在按照age属性排序
if(this.age >other.getAge())
return 1;
if(this.age < other.getAge())
return -1;
return 0;
}
@Override
public int hashCode(){
int result;
result =(name==null?0:name.hashCode());
result= 29 * result+age;
return result;
}
public static void main(String[] args){
Set<Customer> set=new TreeSet<Customer>();
Customer customer1=new Customer("Tom", 16);
Customer customer2=new Customer("Tom", 15);
set.add(customer1);
set.add(customer2);
System.out.println(set);
for(Customer c:set){
System.out.println(c.name+" "+c.age);
}
}
}
第二种实现 Comparator
只需要重写compare
这个是根据Name来排序 反正这个自己改
public int compare(Customer c1, Customer c2) {
if(c1.getName().compareTo(c2.getName())>0)return -1;
if(c1.getName().compareTo(c2.getName())<0)return 1;
return 0;
}
package com.binglian.collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class CustomerComparator implements Comparator<Customer>{
public int compare(Customer c1, Customer c2) {
if(c1.getName().compareTo(c2.getName())>0)return -1;
if(c1.getName().compareTo(c2.getName())<0)return 1;
return 0;
}
public static void main(String args[]){
Set<Customer> set=new TreeSet<Customer>();
Customer customer1=new Customer("Tom", 5);
Customer customer2=new Customer("Tom", 9);
Customer customer3=new Customer("Tom", 2);
set.add(customer1);
set.add(customer2);
set.add(customer3);
Iterator<Customer> iterator=set.iterator();
while(iterator.hasNext()){
Customer customer=iterator.next();
System.out.println(customer.getName()+" "+customer.getAge());
}
}
}