1.String ,StringBuffer的简单总结
1.String
1.String是final类,重写了equals方法
2.字符串连接,考虑编译器和运行期
public class StringTest {
public static void main(String[] args) {
//s6 首先到常量池里面查看是否存在s,存在就堆中直接new 一个s6对象
//如果常量池不存在,就先在常量池中创建一个s,同时堆中也会new一个s6对象
String s6 = new String("s");
//String 字符连接四种情况 相连要考虑编译器和运行期。java是一句一句编译
//普通变量的值只能在运行后才能确定,但是final的常量不一样,可以再编译就确定
String s = "s";
String s1 = s + 1;
String s2 = "s1";
System.out.println(s1 == s2);//false
System.out.println("-----------------------------");
final String s3 = "s";
String s4 = s3 + 1;
String s5 = "s1";
System.out.println(s4 == s5);//true
System.out.println("-----------------------------");
final String s7 = getS();
String s8 = s7 + 1;
String s9 = "s1";
System.out.println(s8 == s9);//false
System.out.println("-----------------------------");
String s10 = getS();
String s11 = s7 + 1;
String s12 = "s1";
System.out.println(s11 == s12);//false
}
public static String getS() {
return "s";
}
}
2.StringBuffer和StringBuilder
StringBuffer 安全的,StringBuilder 不安全的,多线程下面使用StringBuffer但是性能低,所以单线程情况一般使用StringBuilder.
StringBuffer,动态扩充,默认长度16,扩充 leng*2+2 ,建议在知道长度的情况,指定长度,避免容量扩充,提高性能。
字符串相加,在1.5后会用StringBuilder,优化。注意这种s+=i,这种循环会产生多个StringBuilder,性能低。
3.idea 添加查看汇编工具
Arguments : -c $FileNameWithoutExtension$.class
Working directory: $OutputPath$\$FileDirRelativeToSourcepath$
2.Math 和 Random
System.out.println(Math.PI);
System.out.println(Math.abs(-10));
System.out.println(Math.round(Math.random()*1000)/1000.0);
System.out.println(Math.sqrt(2));
System.out.println(floor(1.234564));
Random r = new Random();
System.out.println(r.nextLong());
System.out.println(r.nextInt(10));
Date date = new Date();
// java.sql.Date sqlDate = new java.sql.Date();
System.out.println(date);// 使用两个构造方法
// Date(long date) 参数是毫秒
// Date()Calendar c1 = Calendar.getInstance();
Calendar c2 = new GregorianCalendar();int year = c1.get(Calendar.YEAR);
int month = c1.get(Calendar.MONTH);
int day = c1.get(Calendar.DAY_OF_MONTH);
int hour = c1.get(Calendar.HOUR_OF_DAY);
int minute = c1.get(Calendar.MINUTE);
int second = c1.get(Calendar.SECOND);
int millisecond = c1.get(Calendar.MILLISECOND);
StringBuilder sb = new StringBuilder(50);
sb.append(year).append("年").append(month).append("月").append(day).append("日").append(hour).append(":")
.append(minute).append(":").append(second).append(" ").append(millisecond);
System.out.println(sb.toString());
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS");
String nowDate = df.format(new Date());
System.out.println(nowDate);
3.BigNumber
//大整数运算 String val1 = "84567890986544567"; String val2 = "45097659985495567"; BigInteger b1 = new BigInteger(val1); BigInteger b2 = new BigInteger(val2); System.out.println(b1.add(b2));//+ System.out.println(b1.subtract(b2));//- System.out.println(b1.multiply(b2));//* System.out.println(b1.divide(b2));// / System.out.println(b1.remainder(b2));// % System.out.println(Arrays.toString(b1.divideAndRemainder(b2))); String val3 = "5696.698494847898754789"; String val4 = "6"; BigDecimal b3 = new BigDecimal(val3); BigDecimal b4 = new BigDecimal(val4); System.out.println(b3.add(b4)); System.out.println(b3.subtract(b4)); System.out.println(b3.multiply(b4)); System.out.println(b3.divide(b4)); //System.out.println(b3.scale()-b4.scale()); double pi=3.1415927;//圆周率 //取一位整数,结果:3 System.out.println(new DecimalFormat("0").format(pi)); //取一位整数和两位小数,结果3.14 System.out.println(new DecimalFormat("0.00").format(pi)); //取两位整数和三位小数,整数不足部分以0填补,结果:03.142 System.out.println(new DecimalFormat("00.000").format(pi)); //取所有整数部分,结果:3 System.out.println(new DecimalFormat("#").format(pi)); //以百分比方式计数,并取两位小数,结果:314.16% System.out.println(new DecimalFormat("#.##%").format(pi)); long num = 635463773; System.out.println(new DecimalFormat("###,###").format(num));
4.md5
String password = "admin123456"; //dsfkjdskfj76776f98732 明文(原文) String savePassword = "pmq7VoTEWWLYh1ZPCDRujQ==";//存储的密文 try { MessageDigest md = MessageDigest.getInstance("md5"); //通过MD5计算摘要 byte[] bytes = md.digest(password.getBytes("UTF-8")); System.out.println(Arrays.toString(bytes)); String mdStr = new String(bytes); System.out.println(mdStr); // a-z A-Z 0-9 / * BASE64编码算法 // 1.8版本 String str = Base64.getEncoder().encodeToString(bytes); System.out.println(str); //JDK1.8之前使用 BASE64Encoder base64 = new BASE64Encoder(); String str = base64.encode(bytes); //base64解码 BASE64Decoder decoder = new BASE64Decoder(); byte[] bs = decoder.decodeBuffer(str); System.out.println(str); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
5.BinaryTree
public class BinaryTree { private Node root; //添加节点 public void add(int data){ if(root==null){ root = new Node(data); }else{ root.addNode(data); } } //输出节点 public void print(){ root.printNode(); } private class Node{ private int data; private Node left; private Node right; public Node(int data){ this.data = data; } public void addNode(int data){ if(this.data>data){ if(this.left==null){ this.left = new Node(data); }else{ this.left.addNode(data); } }else{ if(this.right==null){ this.right = new Node(data); }else{ this.right.addNode(data); } } } //中序遍历(先序遍历,后序遍历) public void printNode(){ if(this.left!=null){ this.left.printNode(); } System.out.print(this.data+"->"); if(this.right!=null){ this.right.printNode(); } } } }