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

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

谢谢!!

学JAVA第二十四天,Set集合与StringBuilder的更多相关文章

  1. “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. 菜鸟学Java(十四)——Java反射机制(一)

    说到反射,相信有过编程经验的人都不会陌生.反射机制让Java变得更加的灵活.反射机制在Java的众多特性中是非常重要的一个.下面就让我们一点一点了解它是怎么一回事. 什么是反射 在运行状态中,对于任意 ...

  3. Java第二十四天,线程安全

    线程安全 1.定义 多线程访问共享数据,会产生线程安全问题. 2.代码模拟 卖票Ticked类: package com.lanyue.day22; public class Person { pub ...

  4. Java第十四天,集合、迭代器的使用

    集合 集合框架 一.Collection 1.定义方法: Collection<E> obj = new Collection子类<>(); 因为Collection是一个抽象 ...

  5. “全栈2019”Java多线程第二十四章:等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. NeHe OpenGL教程 第二十四课:扩展

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. javaSE第二十四天

    第二十四天    363 1:多线程(理解)    363 (1)JDK5以后的Lock锁    363 A:定义    363 B:方法:    364 C:具体应用(以售票程序为例)    364 ...

  8. Gradle 1.12用户指南翻译——第二十四章. Groovy 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  9. Python第二十四天 binascii模块

    Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...

随机推荐

  1. RK3288 GPIO 输出问题【转】

    本文转载自:http://m.blog.csdn.net/jiangdou88/article/details/50158673 #define GPIO_BANK0              (0 ...

  2. JAVA 单选样式编写

    <td class="main_matter_td">管网供水情况</td> <td align="left" class=&qu ...

  3. AutoIt脚本在做自动化操作的时候,如何进行错误捕获?

    我的自动化脚本在运行的时候,会生成一个界面,点击该页面上的按钮能够进行自动化操作. 经常遇到的一个问题是: 脚本运行一半,GUI程序出现了异常情况,这个时候,再次点击生成的界面上的按钮,不会有任何反应 ...

  4. c++中static的全部用法

    要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short ...

  5. iOS copy/retain/assign

    1 深复制:内容拷贝,源对象和副本对象指的是两个不同的对象,源对象引用计数器不变,副本对象引用计数器为1 2 浅复制:指针拷贝,源对象和副本对象指的都是同一个对象,对象引用计数器+1,相当于retai ...

  6. 初学者遇到的PostgreSQL字符集问题的解决

    当初学者在使用PostgreSQL数据库,输入中文时,会遇到“ERROR:  invalid byte sequence for encoding "UTF8": 0xd6d0”的 ...

  7. CS231n 2016 通关 第二章-KNN

      课程内容全纪录: 1.讲解图像分类的难点 1.光照强度 2.主体变形 3.主体与背景咬合 4.主体与背景相接近 5.同类别间存在区别 2.KNN 1.最近邻算法 2.Knn 3.hyperpara ...

  8. CreateThread创建线程 互斥量锁

    HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD:线程安全相关的属性,常置为NULL SIZE_T dwStackS ...

  9. c++中.c_str和.c_data

    1 关于.c_str的用法: const char *c_str(); 这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效.因此要么现用先转换,要么把它的数据复制到用户 ...

  10. 自己动手搭建SSM

    1.工具 apache-tomcat 7 apache-maven(后面详细讲!这东西我一开始也很懵逼) mysql 5以上的版本 navicat(有了这个就不用cmd了,可以直接显示数据库,如下图, ...