* 字符串缓冲区。StringBuffer
* 特点:
* 1,缓冲区就是用来缓存数据,意味着他是一个容器
* 2,该容器的长度是可变的
* 3,提供了对容器中的内容操作的方法
* (最多无外乎四种:增删查改)
* 4,该缓冲区可以添加多种类型的元素,基本类型和引用类型
* 5, 无论怎样改变容器中的数据,最终要使用结果,还是必须将其转换成字符串,使用toString()方法
*
* 6, sb.delete(0,length()); //清空缓冲区
*
* append(); 追加:在结尾处添加。
*/
//创建一个字符串缓冲区
// StringBuffer sb = new StringBuffer();
// //使用其添加方法,往缓冲区加入元素
// StringBuffer s1 = sb.append(45);
//
// System.out.println(sb == s1);//true ,append返回的还是原来的缓冲区
//
// sb.append(45).append(true).append("abc");//连续添加,调用动作:方法调用链
//
// System.out.println(sb.toString());
//想要在任意位置添加怎么办 用的是insert()方法
/*
* StringBuilder含义:
* jdk1.5版本出现了一个新的字符串缓冲区
* 功能跟stringBuffer一模一样
*
* 区别
* StringBuffer是线程安全的
* StringBuilder是线程不安全的。为了提高效率,因为不用判断同步锁
*
*
* 对于容器而已,被多线程操作,容器容易出现问题。因为
* 一个线程负责添加,一个线程负责删除。
* 因为线程的随机性会出现安全问题
*
* 加锁,一个线程在执行容器中的内容时,其他线程不可以执行。
* 所以凡事可以操作容器数据的方法都需要明确这个锁。
*
* 每调用一次操作容器的方法(添加,删除,)都需要判断这个锁
* 对于多线程而言,安全了,但效率低
* 对于单线程而言,不涉及安全,但效率低。所以对于线程提供了StringBuilder.
*
* 实际开发时,建议使用StringBuilder,只有在多线程的时候,采用StringBuffer。
*
* 升级:
* 1,简化书写
* 2,提高效率
* 3,提高安全性
*/
/*
* StringBuffer和数组容器的区别?
*
* 1,数组容器是固定长度的
* StringBuffer是可变长度的。
* 2,数组容器一但初始化就明确了元素的类型
* StringBuffer可以存储任意类型。包括基本和引用。
* 3,数组存储完元素可以对元素进行操作(通过角标)。
* StringBuffer存储完了元素后,都会变成字符串,只能用字符串的方法来操作。
*
* int[] arr = {65,22,4,45};
*
* StringBuffer sb = new StringBuffer();
* sb.append(65);
* sb.append(22);
* sb.append(4);
* sb.append(45);
*
* 什么时候用StringBuffer或者StringBuilder?
* 数据个数是可以固定的,可是是不固定的,数据类型也可以是固定的,或者不固定的。
* 只要最终这些数据都需要变成字符串操作时,就可以是用字符串缓冲区
*/
/*
* jdk1.5以后出现的新方式。
*
* Collection 有一个父类接口。Iterable
* 该接口封装了iterator方法,同时提供了一个新的语句。foreach语句。
* 格式:
* for(变量:Collection 集合 or数组){
*
* }
*
* 通常结合泛型使用
*
* 例子:
* ArrayList<String> al = new ArrayList<String>();
*
* al.add("abc1");
* al.add("abc2");
* al.add("abc3");
* al.add("abc4");
* al.add("abc5");
*
* for(String s: al){
* System.out.println(s);
* }
*
*
* 1, foreach循环简化了迭代器。迭代器还用吗?
* 用,因为迭代过程中还可以removed()。
* 一般只对基本遍历简化使用
*
* 2,和传统for循环有什么区别?
* foreach循环特点:必须明确遍历的目标。没有目标没用。目的只能是数组或者Collection集合
* 如果要对数组中的元素进行特定操作时,建议船用For循环,通过角标完成。
*
*/