Java核心类库整理

核心类库

在这里插入图片描述
我们可以看到最上面一层是Iterator,Collection,Map(键值对的形式,key,value)
Collection下一层是List,Set,Queue

接下来我们依次介绍:

Vector

1.同步访问,多线程访问的时候是安全的(我们需要区别list在多线程访问是不安全的)
举个栗子:

  1. 高中众人狂奔去食堂:多线程,不安全
  2. 在食堂每个人排队打饭:多线程,安全
  • list 户外视野开阔,效率第一

  • vector 食堂空间狭小,安全第一

2.包含许多传统方法,不属于集合框架
源码设置:默认值:10
默认值的大小可以更改 根据容量的大小可以增减数量

package Practice;
import java.util.Vector;
/**
 * @Author:Allen
 * @Date:3/17/2021 8:40 PM
 */
public class Demo1 {
    public static void main(String[] args) {
        Vector vector = new Vector(3,2);
     //创建指定的大小的向量,增量用incr指
        System.out.println("init size  "+vector.size());
        System.out.println("init capacity  "+vector.capacity());
        vector.add(1);
        vector.add(2);
        vector.add(3);
        vector.add(4);
        System.out.println("insert 4 numbers "+vector.capacity());
        System.out.println(vector.firstElement());
        System.out.println(vector.contains(3));
        for (Object s:
             vector) {
            System.out.println(s);
        }
    }
}

Set

Set集合的底层是Linkedlist
我们接下就是用TreeSet去实现数据的存储和读取
在代码中我们可以仔细体会Comparable,Comparator方法的不同

  1. Comparable:我们需要改写compareTo方法,优点:结构清晰
  2. Comparator:这里面重写Comparator接口,即compare方法,优点:实现方便

ps:在改写compare to或者compare方法的时候,需注意返回的事 比较符号后面的那个值,14>13 正确,返回顺序是13 14。

import java.util.*;

/**
 * 4、分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样,那在
 * 成绩排序的基础上按照年龄由小到大排序。
 *   Comparable需要改写源码,而Comparator无需更改操作,建议直接在Treeset后编写comparator方法
 *   用collections编写显示的错误是:require : list       但是返回的是TreeSet
 *
 * @Author:Allen
 * @Date:3/17/2021 4:58 PM
 */
public class Demo6 {
    public static void main(String[] args) {
        TreeSet<Student> objects = new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                if (o1.getScore()<o2.getScore())
                    return 1;
                else if(o1.getScore()==o1.getScore()){
                    if (o1.getAge()>o1.getAge())
                        return 1;
                }
                     return -1;
            }
        });
        Student s1 = new Student("贾宝玉",14,88.5);
        Student s2 = new Student("林黛玉",13,90.5);
        Student s3 = new Student("史湘云",13,85);
        Student s4 = new Student("薛宝钗",15,91);
        Student s5 = new Student("Allen",12,85);
          objects.add(s1);
          objects.add(s2);
          objects.add(s3);
          objects.add(s4);
          objects.add(s5);
//        Collections.sort(objects, new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                if (o1.getScore()<o2.getScore())
//                    return 1;
//                else if(o1.getScore()==o1.getScore()){
//                    if (o1.getAge()>o1.getAge())
//                        return 1;
//                }
//                return -1;
//            }
//        });
        for (Student s:
             objects) {
            System.out.println(s);
        }

    }
}
//implements Comparable<Student>
 class Student {
    private String name;
    private int age;
    private double score;
    //此处我们改写了compareTo方法,这里和上文的comparator方法重复,保留其中之一就好
   @Override
    public int compareTo(Student o) {
         //this 和 o 进行比较   返回的数据:负数/0/正数
         if(this.score<o.score){
             return 1;
         }else if(this.score==o.score){
            if (this.age>o.age) {
                 return 1;
             }
         }
         return -1;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Double.compare(student.score, score) == 0 && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, score);
    }

    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }

    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 double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
}

Map整理

Map通常时键值对的形式,我们常见的Map方法有:

import java.util.HashMap;
import java.util.Map;

/**
 * @Author:Allen
 * @Date:3/19/2021 9:01 PM
 */
public class Demo1 {
    public static void main(String[] args) {
      Map map = new HashMap();
      map.put("Allen",23);
      map.put("Robin",45);
      map.put("Wu",48);
        System.out.println(map);
        map.remove(23);
        System.out.println(map.size());
        if(!map.containsKey(23)){
            System.out.println("Allen的信息已经被删除");
        }
    }
}

结果显示
照片显示
与你全力成长,同时水平有限,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值