java入门教程3

一.集合

集合概述

  1. 什么是集合:由若干个确定的元素所构成的整体,在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。
  2. 为什么引入集合:为了便于处理一组类似的数据

list

ArrayList< E >

概述:

一种可调整大小的数组,其中< E >是一种特殊的数据类型——泛型

用法:
  1. 构造方法:

    ArrayList<Object> arrayList = new ArrayList<>();
    
  2. 常用方法:

    //添加元素到集合末尾
    arrayList.add("hujiing");
    //添加元素到指定索引处
    arrayList.add(0,"21130124");
    //删除指定元素,返回是否删除成功
    System.out.println(arrayList.remove("21130124"));
    //删除指定索引处的元素,返回被删除的元素
    System.out.println(arrayList.remove(0));
    //修改指定索引处的元素,返回被修改的元素
    System.out.println(arrayList.set(0,"666"));
    //返回指定索引处的元素
    System.out.println(arrayList.get(1));
    //返回集合长度
    System.out.println(arrayList.size());
    
  3. 实例:存储学生对象并遍历

    public class Student {
        private String name;
        private String age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            ArrayList<Student> arrayList = new ArrayList<>();
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入学生个数:");
            int n= scanner.nextInt();
            for (int i = 0; i < n; i++) {
                addStudent(arrayList);
            }
            for (Student s : arrayList) {
                System.out.println("姓名:"+s.getName() + ",年龄:" + s.getAge());
            }
        }
        public static void addStudent(ArrayList arrayList){
            Scanner scanner = new Scanner(System.in);
            Student s= new Student();
            //输入姓名、年龄
            System.out.println("请输入姓名:");
            String name = scanner.nextLine();
            System.out.println("请输入年龄:");
            String age = scanner.nextLine();
            //将输入的姓名及年龄赋予对象s
            s.setName(name);
            s.setAge(age);
            //将对象s添加到列表中
            arrayList.add(s);
        }
    }
    

map

HashMap

概述:

Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map

用法:
  1. 构造方法:

    HashMap<String,String> hashMap = new HashMap<String,String>();//键和值类型均为string型
    
  2. 常用方法:

    //将指定值与该映射中的指定键相关联;
    // 第一次出现:添加元素
    hashMap.put("21130124","胡靖");
    // 第二次出现:修改元素
    hashMap.put("21130124","hj");
    //根据键删除键值对元素
    hashMap.remove("21130124");
    //删除所有键值对元素
    hashMap.clear();
    //判断集合中是否有指定的键
    hashMap.containsKey("21130124");
    //判断集合中是否有指定的值
    hashMap.containsValue("胡靖");
    //判断集合是否为空
    hashMap.isEmpty();
    //键值对个数
    hashMap.size();
    //根据键获取值
    hashMap.get("21130124");
    //获取所有键的集合
    {Set<String> keySet= hashMap.keySet();
    for (String key:keySet) {
        System.out.println(key);
    }}
    //获取所有值的集合
    {Collection<String> values = hashMap.values();
    for (String val:values){
        System.out.println(val);
    }}
    
  3. 遍历方式

    HashMap<String, String> map = new HashMap<>();
    map.put("21130124","胡靖");
    map.put("21130303","韩京");
    //获取键的集合
    Set<String> strings = map.keySet();
    //增强for:(遍历获取的元素:遍历对象)
    for (String s:strings){
        //     value = 遍历获取的键对应的值
        String value = map.get(s);
        //输出键值对
        System.out.println(s+","+value);
    }
    

set

HashSet

概述:

Set体系集合可以知道某物是否已经存在于集合中,不会存储重复的元素。加入Set的每个元素必须是唯一的,否则,Set是不会把它加进去的。没有带索引的方法。无序

用法:
  1. 构造方法:

    HashSet<String> hashSet = new HashSet<String>();
    
  2. 常用方法:

    hashSet.add("1");
    
  3. 实例:学生存储系统

    public class Student {
        private String name;
        private String id;
    
        public Student(String name, String id) {
            this.name = name;
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
    
            Student student = (Student) o;
    
            if (name != null ? !name.equals(student.name) : student.name != null) return false;
            return id != null ? id.equals(student.id) : student.id == null;
        }
    //快捷键Alt+insert,选择hashcode and equal
        @Override
        public int hashCode() {
            int result = name != null ? name.hashCode() : 0;
            result = 31 * result + (id != null ? id.hashCode() : 0);
            return result;
        }
    }
    
    
    public static void main(String[] args) {
        HashSet<Student> students = new HashSet<>();
        Student s1 = new Student("胡靖", "21130124");
        Student s2 = new Student("韩京", "21130303");
        Student s3 = new Student("胡靖", "21130124");
        students.add(s1);
        students.add(s2);
        students.add(s3);
    
        for(Student s:students){
            System.out.println(s.getName()+","+s.getId());
        }
    }
    

Treeset

概述:

有序,排序方法取决于构造方法

用法:
  1. 自然排序:

    public class Main {
        public static void main(String[] args) {
            TreeSet<Student> treeSet = new TreeSet<>();
            Student s1 = new Student("hj",18);
            Student s2 = new Student("hx",20);
            Student s3 = new Student("hj",17);
            Student s4 = new Student("zxj",18);
            treeSet.add(s1);
            treeSet.add(s2);
            treeSet.add(s3);
            treeSet.add(s4);
            for(Student s:treeSet){
                System.out.println(s.getName()+","+s.getAge());
            }
        }
    }
    
    public class Student implements Comparable<Student>{
        private String name;
        private int age;
    
        public Student() {
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
        /**重写compareTo*/
        @Override
        public int compareTo(Student o) {
            //年龄按升序排序,this看做要进入集合的元素,o看做原本有的元素,this大则返回1
            int num = this.age-o.age;
            //姓名按字典序排序
            int num1= num==0?this.name.compareTo(o.name):num;
            return num1;
            /**返回值为1时,升序排序;为0时跳过;为-1时降序*/
        }
    }
    
  2. 比较器排序:

    public class Student{
        private String name;
        private int age;
    
        public Student() {
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            //可如自然排序中,在student中实现comparator接口,也可如下创建匿名内部类实现
            TreeSet<Student> treeSet = new TreeSet<Student>(new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                    int num = o1.getAge()-o2.getAge();
                    int num1= num==0?o1.getName().compareTo(o2.getName()):num;
                    return num1;
                }
            });
            Student s1 = new Student("hj",18);
            Student s2 = new Student("hx",20);
            Student s3 = new Student("hj",17);
            Student s4 = new Student("zxj",18);
            treeSet.add(s1);
            treeSet.add(s2);
            treeSet.add(s3);
            treeSet.add(s4);
            for(Student s:treeSet){
                System.out.println(s.getName()+","+s.getAge());
            }
        }
    }
    

二.常用类

1.Object

概述:

  • 此类是类层次结构的根,任何类都直接或间接基础该类;
  • 子类的构造方法默认访问父类的无参构造方法的原因是:他们的祖宗类Object为无参构造

常用方法:

  1. toString:直接打印类信息时,结果不便阅读,为了方便打印类信息,最好重写toString
  2. equals:直接比较类时,比较的是地址,为了方便同类内容比较,最好重写equals

2.String

概述:

String就是字符串,所以所有双引号字符串都是String的对象

用法:

  1. 构造方法:

    //创建空白字符串对象
    String s = new String();
    //根据字符数组内容创建字符串
    char[] ch = {'1','2','3'};
    String s1 = new String(ch);
    //根据字节数组内容创建字符串
    byte[] bytes = {1,2,3};
    String s2 = new String(bytes);
    //直接赋值
    String s3 = "123";
    
  2. 常用方法

    //比较地址是否相同
    System.out.println(s1==s2);
    //比较内容是否相同
    s1.equals(s2);
    //返回指定索引处的char值
    s1.charAt(1);
    //返回字符串长度
    s1.length();
    

3.StringBuilder

概述:

可变的字符串类

用法:

  1. 构造方法

    //创建空白对象
    StringBuilder stringBuilder = new StringBuilder();
    //根据字符串s创建对象
    String s = "123";
    StringBuilder stringBuilder1 = new StringBuilder(s);
    
  2. 常用方法:

    //添加数据,并返回数据本身
    s1.append(1);
    //反转字符串,返回相反的字符序列
    s2.reverse();
    //转化成string
    s2.toString();
    

4.StringBuffer

概述:

可变的字符串类

用法:

  1. 构造方法

    StringBuffer stringBuffer = new StringBuffer("123456");//括号内为字符串内容
    
  2. 常用方法

    //将指定字符串追加到末尾
    stringBuffer.append("123456");
    //将字符串反转
    stringBuffer.reverse();
    //移除指定位置的字符串
    //参数:起始位置的角标
    stringBuffer.delete(0,1);
    //将int参数的字符串表示形式插入此序列中
    stringBuffer.insert(1,1);
    //使用给定String中的字符替换此序列的子字符串中的字符
    //参数:起始位置角标及替换字符
    stringBuffer.replace(1,2,"12");
    //截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
    stringBuffer.substring(1,2);
    

思考:

stringbuffer与stringbuilder的区别:

StringBuffer:可变字符串、效率低、线程安全;

StringBuilder:可变字符序列、效率高、线程不安全;

使用原则:

如果要操作少量的数据,用String ;

单线程操作大量数据,用StringBuilder ;

多线程操作大量数据,用StringBuffer。

5.System

概述:

System是一个类,这个System类主要是一些与系统相关的属性和方法的集合,而且其内部的方法全部是静态的,所以我们直接使用System直接调用就好,比如我们常用的一个System.out.print。

常用方法:

//终止当前运行的java虚拟机,status值非零为异常
System.exit(0);
//返回当前时间与1970年01月01日00:00点之间的毫秒差值
System.currentTimeMillis();
//将数组中指定数据拷贝到另一个数组,其中传输依次为
//原数组,原数组索引起始位置,目标数组,目标数组索引起始位置,复杂元素个数
System.arraycopy();

6.Data

概述:

表示特定的瞬间,精确到毫秒,可以通过方法来设定自己所表示的时间,可以表示任意的时间

用法:

  1. 构造方法:

    //当前时间
    Date date = new Date();
    //与1970年01月01日00:00点相差time时长的时间,单位毫秒
    long time = 1000*60*60;
    Date date1 = new Date(time);
    
  2. 常用方法:

    //获取从1970年01月01日00:00点到对象现在的时间值
    date.getTime();//结果为1970年01月01日00:00点到现在的毫秒数
    date1.getTime();//结果为date1值与1970年01月01日00:00点时间差毫秒数
    //设置时间,单位毫秒
    date.setTime(1000);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值