09_集合_第9天(StringBuilder、ArrayList集合)

今日学习目标

  • 能够使用StringBuilder类的添加功能和反转功能
  • 能够使用数组存储自定义类型并遍历
  • 能够使用ArrayList集合的构造方法创建ArrayList集合对象
  • 能够使用ArrayList集合存储数据
  • 能够使用ArrayList集合中常用的方法
  • 能够使用ArrayList集合存储字符串并遍历
  • 能够使用ArrayList集合存储自定义对象并遍历
  • 能够将数组中的元素添加到集合中,并按要求打印到控制台上
  • 能够使用类作为形式参数和返回值

第1章    StringBuilder类

1.1 StringBuilder概述

  我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuilder就可以解决这个问题。

    

1.2 StringBuilder和String的区别?

  • String的内容是固定的。
  • StringBuilder的内容是可变的。

1.3     构造方法

  • 无参数构造方法
    • public StringBuilder() 构造一个空的StringBuilder容器  
  • 带有字符串参数的构造方法
    • public StringBuilder(String str) 构造一个StringBuilder容器,并将字符串添加进去  
public class Demo02StringBuilder {
    public static void main(String[] args) {
        //创建对象
        StringBuilder builder = new StringBuilder();
        //public StringBuilder append(任意类型)
        StringBuilder builder2 = builder.append("hello");
        System.out.println("builder:"+builder);//builder:hello
        System.out.println("builder2:"+builder2);//builder2:hello
        System.out.println(builder == builder2);//true
        /*
        builder.append("hello");
        builder.append("world");
        builder.append("true");
        builder.append("100");
        */
        //链式编程
        builder.append("hello").append("world").append(true).append(100);
        System.out.println("builder:"+builder);
        //public StringBuliderreverse()
        builder.reverse();
        System.out.println("builder:"+builder);
    }
}

1.5  与String的相互转换

    String转成StringBuilder:

  StringBuilder构造方法,或者append方法

    StringBuilder转成String:

  StringBuilder类的方法 public String toString()

练习:数组元素格式拼接 举例:int[] arr = {1,2,3};结果:[1, 2, 3]

 

public class Demo04StringBuilderTest {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {1,2,3};
        //调用方法
        String s = arrayToString(arr);
        //输出结果
        System.out.println("s:" + s);
    }
        /*写方法实现拼接
         * 两个明确:
         *         返回值类型:String
         *         参数列表:int[] arr
         */
    public static String arrayToString(int[] arr){
        StringBuilder builder = new StringBuilder();
        builder.append("[");
        for(int x = 0;x < arr.length;x++){
            if(x==arr.length-1){
                builder.append(arr[x]).append("]");
            }else{
                builder.append(arr[x]).append(",");
            }
        }
        String result = builder.toString();
        return result;
    }
}

字符串反转

import java.util.Scanner;
/*
 * 字符串反转
 */
public class Demo05StringBuilderTest {
    public static void main(String[] args) {
        //1.键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s = sc.nextLine();
        //3.调用方法
        String result = myReverse(s);
        //4.输出结果
        System.out.println("result:"+result);
    }
    /*
     * 2.写方法实现反转
     * 两个明确:
     *         返回值类型:string
     *         参数列表:String
     */
    public static String myReverse(String s){
        //String -- StringBuilder -- reverse() -- String
        StringBuilder builder = new StringBuilder(s);
        builder.reverse();
        String result = builder.toString();
        return result;
    }
}

判断字符串的对称性
  对称性是指一个字符串进行反转后,还和原来的字符串一致.
  例如: abcba,反转后还是abcba,反转前后是一致的

public class Demo06StringBuilderTest {
    public static void main(String[] args) {
        String str = "abcba";
        boolean bool = symmetric(str);
        System.out.println(bool);
    }
    /*
     * 实现字符串对称判断
     * 返回布尔值
     *     参数类型:String
     *     返回值:boolean
     */
    public static boolean symmetric(String str){
        //创建StringBuilder对象
        StringBuilder builder = new StringBuilder();
        //将字符串添加到容器
        builder.append(str);
        //反转字符串
        builder.reverse();
        //获取反转后的字符串
        String str2 = builder.toString();
        System.out.println(str2);//abcba
        //String类equals方法判断两个字符串是否相等
        return str.equals(str2);//true
    }
}

第2章    ArrayList集合

2.1 对象数组的案例

创建一个学生数组,存储三个学生对象并遍历

/*
 * 对象数组的案例
 *     创建一个学生数组,存储三个学生对象并遍历
 */
public class Student {
    private String name;
    private int age;
    public Student(){
        
    }
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public int getAge(){
        return age;
    }
}

public class Demo01Array {
    public static void main(String[] args) {
        //创建数组
        Student[] students = new Student[3];
        //创建学生对象
        Student s1 = new Student("曹操",40);
        Student s2 = new Student("刘备",35);
        Student s3 = new Student("孙权",30);
        //把学生对象作为元素赋值给学生数组
        students[0] = s1;
        students[1] = s2;
        students[2] = s3;
        //遍历学生数组
        for(int x = 0;x<students.length;x++){
            Student s = students[x];
            //System.out.println(s);
            System.out.println(s.getName()+"---"+s.getAge());
        }    
    }
}

2.2 为什么出现集合类

我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。

而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识里面,有哪些是容器类型的呢?数组和StringBuilder。

但是呢? StringBuilder的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。

而对象数组又不能适应变化的需求,因为数组的长度是固定的,这个时候,为了适应变化的需求,Java就提供了集合类供我们使用,由此可见集合的长度是可变的。

2.3     ArrayList类的构造方法和成员方法

  • ArrayList<E>集合:大小可变数组的实现
    • <E>:是一种特殊的数据类型,泛型。
    • 在出现E的地方我们使用引用数据类型替换即可
    • 举例:ArrayList<String>,ArrayList<Student>
  • 构造方法
    • public ArrayList():默认构造
  • 成员方法
    • 添加元素  
      • public boolean add(E e):添加元素    
      • public void add(int index,E element):在指定的索引处添加一个元素    
public class Demo01ArrayList {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<String> list = new ArrayList<String>();
        //add(E e):添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        //add.(int index,E element):在指定的索引出添加一个元素
        list.add(1, "android");
        System.out.println("array:"+list);
    }
}

更多成员方法

  • 获取元素
    • public E get(int index):返回指定索引处的元素  
  • 集合长度
    • public int size():返回集合中的元素的个数  
  • 删除元素
    • public boolean remove(Object o):删除指定的元素,返回删除是否成功  
    • public E remove(int index):删除指定索引处的元素,返回被删除的元素  
  • 修改元素
    • public E set(int index,E element):修改指定索引处的元素,返回被修改的元素  
import java.util.ArrayList;
public class Demo02ArrayList {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<String>array = new ArrayList<String>();
        //添加元素
        array.add("hello");
        array.add("world");
        array.add("java");
        //public E get(int index):返回指定索引处的元素
        System.out.println("get:"+array.get(0));
        System.out.println("get:"+array.get(1));
        System.out.println("get:"+array.get(2));
        //public int size():返回集合中的元素的个数
        System.out.println("size:"+array.size());//3
        //public boolean remove(Object o):删除指定的元素,返回删除是否成功
        System.out.println("remove:"+array.remove("world"));//true
        System.out.println("remove:"+array.remove("world"));//false        
        //public E remove(int index):删除指定索引处的元素,返回被删除的元素
        System.out.println("remove:"+array.remove(0));//hello        
        //public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
        System.out.println("set:"+array.set(0, "android"));//java        
        //输出
        System.out.println("array:"+array);//[android]
    }
}

存储基本数据类型

  • byte         Byte
  • short        Short
  • int            Integer
  • long         Long
  • float         Float
  • long         Long
  • char         Character
  • boolean   Boolean 

使用集合存储整数该怎么存储?对于基本数据类型集合是不存储的,因此不能写int,但是可以存储基本类型的包装类型Integer。

public class Demo02ArrayListTest {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        for(int x = 0;x<list.size();x++){
            Integer i = list.get(x);
            System.out.println(i);
        }
    }
}

1.1     ArrayList类案例

  练习一:存储字符串并遍历。

public class Demo03ArrayList {
    public static void main(String[] args){
        //创建集合对象
        ArrayList<String>list = new ArrayList<String>();
        //添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        //获取元素
        //原始做法
        System.out.println(list.get(0));
        System.out.println(list.get(1));
        System.out.println(list.get(2));
        System.out.println("--------------");
        for(int i = 0;i < 3;i++){
            System.out.println(list.get(i));
        }
        System.out.println("--------------");
        //如何知道集合中元素的个数呢?size()
        for(int i = 0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        System.out.println("--------------");
        //最标准的用法
        for(int i = 0;i<list.size();i++){
            String s = list.get(i);
            System.out.println(s);
        }
    }
}

练习二:
给定一个字符串数组:{“张三丰”,“宋远桥”,“张无忌”,“殷梨亭”,“张翠山”,“莫声谷”},
将数组中的元素添加到集合中,并把所有姓张的人员打印到控制台上。

import java.util.ArrayList;
public class Demo03ArrayListTest {
    public static void main(String[] args) {
        //定义字符串数组
        String[] strArray = {"张三丰","宋远桥","张无忌","殷梨亭","张翠山","莫声谷"};
        //创建集合对象
        ArrayList<String>list = new ArrayList<String>();
        //遍历字符串数组,获取到每一个字符串元素
        for(int x = 0;x<strArray.length;x++){
            //把获取到的字符串元素添加到集合
            list.add(strArray[x]);
        }
        //遍历集合
        for(int x = 0;x<list.size();x++){
            String s = list.get(x);
            //要判断每一个字符串元素是否以"张"开头,如果是,就输出在控制台
            if(s.startsWith("张")){
                System.out.println(s);
            }
        }
    }
}
原文地址:https://www.cnblogs.com/Haidrens/p/10142339.html