set相关

ArrayList 允许快速随机存取,相比于LinkedList不适合拿来进行元素安插和移除操作。
LinkedList 提供最佳循序存取,适合安插和移除元素,随机存取操作比ArrayList缓慢。
HashSet 只存放唯一值,是把搜寻时间看得很重要,用hash方式作set,故Access time complexity = O(1)
TreeSet 同上,但是存入的元素都会经过排序,所以速度比HashSet慢一点
LinkedHashSet 此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。
 
Set 无序的,不可以重复元素 
 |--HashSet: 底层数据结构是哈希表, 线程不同步 
         hashSet是如何保证元素唯一性呢? 
          是通过元素的两个方法, hashCode 和  equals 来完成的  
          如果元素的hashCode值相同,才会判断equals 是否为true 
          如果元素的hashCode值不同,不会调用 equals. 
           
          注意: 对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法. 
             
 |--TreeSet: 可以对Set集合中的元素进行排序 
             底层数据结构式是二叉树 
             compareTo 方法 return 0  TreeSet 中就只会有一个 元素 
 
如果我们自己定义的一个类的对象要加入到TreeSet当中,那么这个类必须要实现Comparable接口。
 
/**
 *   testTreeSet1自然排序   testTreeSet2自定义排序
*/
public   class  TreeSetTest {
 
        public   static  void  main(String[] args) {
            TreeSetTest tst =  new  TreeSetTest();
            tst.testTreeSet1();
            tst.testTreeSet2();
      }
      
        public   void  testTreeSet1() {
             Set set1 =  new  TreeSet();
             set1.add(  new  BigDecimal(  "3" )) ;
             set1.add(  new  BigDecimal(  "5" )) ;
             set1.add(  new  BigDecimal(  "1" )) ;
             set1.add(  new  BigDecimal(  "9" )) ;
            
              //会报错java. lang.String cannot be cast to java.math.BigDecimal
              //set1.add("1");
            
             for  (Iterator it = set1.iterator(); it.hasNext();) {
                  System.  out  .println(it.next());
            }
              //output:1  3  5  9
      }
      
        public   void  testTreeSet2() {
             Set set1 =  new  TreeSet();
             set1.add(  new  Customer(  "Tom" , 20)) ;
             set1.add(  new  Customer(  "Petter"  , 22));
             set1.add(  new  Customer(  "Mike"  , 19));
             set1.add(  new  Customer(  "Tom" , 21)) ;
 
              for  (Iterator it = set1.iterator(); it.hasNext();) {
                  System.  out  .println(it.next());
            }
              //output:
              //Mike 19
              //Petter 22
              //Tom 20
              //Tom 21
      }
 
      // 注:要实现equals,hashCode方法
        class  Customer  implements  Comparable{
              public  String  name  ;
              public   int  age  ;
              public  Customer(String name,  int  age) {
                    this  . name  = name;
                    this  . age  = age;
            }
              @Override
              public  String toString() {
                    return   this  . name  " "  +  this  . age  ;
            }
            
              @Override
              public   boolean  equals(Object obj) {
                    if  ( this  == obj)  return   true  ;
                    if  (!(obj  instanceof  Customer))  return   false  ;
                  Customer other = (Customer)obj;
                    if  ( this  . name  .equals(other.  name ) &&  this  . age  == other. age  ) {
                          return   true  ;
                  }  else  {
                          return   false  ;
                  }
            }
            
              @Override
              public   int  hashCode() {
                  
                   int  result;
                  result = (  name  ==  null  ? 0 :  name .hashCode());
                  result = 29 * result +  age  ;
                   return  result;
            }
            
              @Override
              public   int  compareTo(Object o) {
 
                  Customer other = (Customer)o;
                    //先按name属性排序(如果想按倒序排序,则将下面依次改成返回-1/1)
                    if  ( this  . name  .compareTo(other.  name ) > 0)  return  1;
                    if  ( this  . name  .compareTo(other.  name ) < 0)  return  -1;
                  
                    //再按age属性排序
                    if  ( this  . age  > other.  age return  1;
                    if  ( this  . age  < other.  age return  -1;
                  
                    return  0;
            }
      }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值