zoukankan      html  css  js  c++  java
  • 学JAVA第二十四天,Set集合与StringBuilder

    下面的内容需要慢慢看,因为,我的语言表达能力不是很好

    首先说Set把,Set集合是一个无序且不允许重复的集合,而且查找效率也是快的可怕的。

    但是,有些时候,我们必须要用储存多个相同的值时,Set也是可以通过特殊的方法来储存

    相同的值的。

    例如,我们创一个实体类,通过实体类来实现。

    这样:

    创建实体类:

    public class Strings{
        private String a;
        public void A(String a){
            this.a=a;
        }        
        public String getA(){
            return this.a;
        }    
        
      @Override
    public int hashCode(){ return a.hashCode();//可以先运行一遍,然后再把这个方法注释再运行一遍 }              //对比一下效果 @Override public boolean equals(Object obj){//上一个对比后,然后,又把这个方法注释运行一遍 return true;            //对比一下效果 } public String toString(){ return this.a; } }

     

    然后,测试类:

    import java.util.*;
    
    public class Test{
        public static void main(String args[]){
            
                Set<String>mySet = new HashSet<String>();//我们可以把这里的String的类型改成StringBuffer或StringBuilder
                                    //
    StringBuffer或StringBuilder自身没有hashCode方法,只能继承Object的默认方法,散列码是对象地址
                String a="123";         //因为String a = "123",这样它的散列码由内容获得,结果一样,所以就只能存一个 
                  String b
    ="123";    //a、b、c它们的值都是相同的
                   String c
    ="123";
                   mySet.add(a);
                   mySet.add(b);
                  mySet.add(c);
                 System.out.println(a
    ==b);//查看a和b是不是相同的
                System.out.println(mySet.size());//这里是查看集合里有几个元素
                
    for(String s:mySet){    //如果上面用了StringBuffer或StringBuilder,那这里的String也要改成相应的StringBuilder或StringBuilder
                System.out.println(s);//用遍历进行输出打印 
              }
            
            System.out.println( "----------------------------" );
          Set<Strings>mySet5 = new HashSet<Strings>();//Strings是上边创建的实体类,所以,这里用实体类来当做类型
            Strings sa =new Strings(); 
            Strings sb
    =new Strings();
             Strings sc
    =new Strings(); sa.A("123"); sb.A("123");//给对象赋值 sc.A("123"); mySet5.add(sa); mySet5.add(sb); mySet5.add(sc); System.out.println(sa==sb);//查看两个是否相等 System.out.println(mySet5.size());//打印元素个数 System.out.println(mySet5);//直接打印集合 for(Strings s:mySet5){ System.out.println(s);//遍历打印 } System.out.println( "----------------------------" ); } }

    通过这样的方法,我们就可以达到用Set储存相同的值的效果了

    现在来说StringBuffer,我上一次写过StringBuffer的好处,通过用String用加号来连接字符串和循环结合,对比得出,StringBuffer的效率确实

    比用加号连接字符串效率快,但是,今天有个比StringBuffer更快的StringBuilder ,StringBuilder的效率比StringBuffer更快

    例如代码:

    import java.util.*;
    public class Test{
        public static void main(String args[]){    
            long start =new Date().getTime();
             StringBuilder sBuffer1 = new StringBuilder("NFIT");         
            System.out.println("这是StringBuilder");
            for(int i=0;i<10000000;i++){
                sBuffer1.append(i);            
            }
            long end = new Date().getTime();
            String str=sBuffer1.toString();
            System.out.println(str.length());        
            System.out.println(end-start);        
            
             StringBuffer sBuffer2 = new StringBuffer("NFIT");
            System.out.println("这是StringBuffer");
            for(int i=0;i<10000000;i++){
                sBuffer2.append(i);            
            }
            long end2 = new Date().getTime();
            String str2=sBuffer2.toString();
            System.out.println(str2.length());        
            System.out.println(end2-end);  
            
            String strs="NFIT";
            System.out.println("这是加号的");
            for(int i=0;i<10000000;i++){
                
                strs=strs+i;
            }
            long end3 = new Date().getTime();
            System.out.println(strs.length());        
            System.out.println(end3-end2); 
        }
    }

     想要StringBuffer与StringBuilder的区别明显的话,那就要让循环次数乘10,或更多,这样效果会明显有点

     所以,还是推荐用StringBuilder,这个效率还是很高的。

     现在要说明一下Collection是不包含Map的,非常感谢昨天的那位小哥哥的提醒,要不然到现在还因为是包含的呢!!!

    谢谢!!

  • 相关阅读:
    centos7系统中忘记了root管理员账号密码的解决方式
    【python之路48】生成器表达式、推导式
    小米集团信息化中台战略
    分时函数
    函数节流
    JS浮点计算问题
    要转型做前端开发了
    优秀的开发人员和测试人员应有的态度
    C#数组的笔记
    LINQ不包含列表
  • 原文地址:https://www.cnblogs.com/chenxiaojie/p/10821909.html
Copyright © 2011-2022 走看看