ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

学JAVA第二十四天,Set集合与StringBuilder

2019-05-06 20:54:50  阅读:222  来源: 互联网

标签:Set JAVA String StringBuilder System println public out


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

首先说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的,非常感谢昨天的那位小哥哥的提醒,要不然到现在还因为是包含的呢!!!

谢谢!!

 

标签:Set,JAVA,String,StringBuilder,System,println,public,out
来源: https://www.cnblogs.com/chenxiaojie/p/10821909.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有