学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的,非常感谢昨天的那位小哥哥的提醒,要不然到现在还因为是包含的呢!!!
谢谢!!
学JAVA第二十四天,Set集合与StringBuilder的更多相关文章
- “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 菜鸟学Java(十四)——Java反射机制(一)
说到反射,相信有过编程经验的人都不会陌生.反射机制让Java变得更加的灵活.反射机制在Java的众多特性中是非常重要的一个.下面就让我们一点一点了解它是怎么一回事. 什么是反射 在运行状态中,对于任意 ...
- Java第二十四天,线程安全
线程安全 1.定义 多线程访问共享数据,会产生线程安全问题. 2.代码模拟 卖票Ticked类: package com.lanyue.day22; public class Person { pub ...
- Java第十四天,集合、迭代器的使用
集合 集合框架 一.Collection 1.定义方法: Collection<E> obj = new Collection子类<>(); 因为Collection是一个抽象 ...
- “全栈2019”Java多线程第二十四章:等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- NeHe OpenGL教程 第二十四课:扩展
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- javaSE第二十四天
第二十四天 363 1:多线程(理解) 363 (1)JDK5以后的Lock锁 363 A:定义 363 B:方法: 364 C:具体应用(以售票程序为例) 364 ...
- Gradle 1.12用户指南翻译——第二十四章. Groovy 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Python第二十四天 binascii模块
Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...
随机推荐
- iOS 摇一摇功能的实现
在 UIResponder中存在这么一套方法 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event __OSX_A ...
- let 命令 与 var的区别
ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. <script> { let a = 10; var b = 1; } ...
- 【转载】Android Studio简单设置
界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings --> Appearance --> Theme ,选择 Darcula 主题即可 ...
- bzoj 2301 [HAOI2011]Problem b(莫比乌斯反演+分块优化)
题意:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 1≤n≤50000,1≤a≤b≤50000, ...
- 理解Objective-C Runtime (五)协议与分类
Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到. Objective-C中的协议是普遍存在的 ...
- [POI 2014] Little Bird
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3831 [算法] 单调队列优化动态规划 时间复杂度 : O(N) [代码] #incl ...
- jQuery EasyUI Portal 保存拖动位置,仿谷歌DashBoard效果的
仿照谷歌http://www.google.com/ig?hl=zh-CN中的效果,本文档中包含了拖动后保存位置至Cookie中以及拖动后不保存位置的html文件效果,文档结构
- zabbix3.4自定义监控
zabbix的服务器.客户端都已经部署完成,监控正常,用的是微信报警: 现在想监控一台Linux服务器(172.16.0.56)的剩余内存,在小于一定值的时候就报警: 1.在172.16.0.56上, ...
- Ubuntu中字体的改变
1.sudo dpkg-reconfigure console-setup 2.弹出 Configuring console-setup 界面,选择适当的编码格式,我们一般选择默认的UTF-8,选择O ...
- linux mplayer 播放yuv格式 (转载)
转自:http://blog.csdn.net/ly0303521/article/details/38713791 在mplayer中查看YUV格式的图片或视频,可使用如下命令: mplayer - ...