首页 > 其他分享 >集合(Collection)

集合(Collection)

时间:2023-02-21 21:33:58浏览次数:47  
标签:sname list sscore Collection Stu sid 集合 public

前几天做数据结构题碰到了集合,当时并没有学,只是通过做题对此稍微有了了解。今天正好学到了,来做一下学习记录。

 一.集合总体框架 

由上图可知,集合的实现方式有两大类:

(1)线性接口:该集合的顶层接口是java.util.Collection,所有集合中的数据都是将自身存储到集合中。

该接口下有两个子接口:

  java.util.List  有序,可重复

  java.util.Set  无序,不可重复

(2)键值映射:该集合的顶层接口是java.util.Map,所有集合中的数据都是以键值映射的方式存储到集合中,即都必须创建一个关键字key,对应一个值value,其中key是唯一的。

我们常用的三个接口是List,Set,Map。

二.集合的功能

集合和数组一样,都是用来存储相同类型数据的容器。

现在我们使用集合时都会和泛型一起使用,使用泛型来约束集合中可以保存的数据类型。

三.常用实现类

我们常用的实现类有:

ArrayList——有序可重复,线性集合中使用最多的一个类,就是一个可变长度的数组。查找易,增删难

LinkedList——有序可重复,链表方式实现的线性集合,增删改易,查找难;

HashSet——散列集合,无序不重复。Set接口中的常用类;

HashMap——Hash算法的键值映射集合,按键找值;

TreeSet——有序不重复,是个有序的Set接口的实现类,经过了排序;

TreeMap——有序的Map接口的实现类。

四.集合的排序

集合的排序指的是List集合的排序,因为Set是无序的,不需要排序。

4.1String类型的集合排序

 针对List集合进行排序的方法是Collections.sort()。

 是Collections类里的一个静态方法。

我们看String类可见,它实现了Comparable接口,所以具有比较的能力。

 

 案例:

package com.xja.test3;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;

/**
 * @描述:
 * @author:
 * @date:2023/2/2119:13
 * @version:
 **/
public class T1 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("hij");
        list.add("abc");
        list.add("def");
        //未排序前,默认添加顺序排序
        System.out.println(list);
        //排序
        Collections.sort(list);
        //排序后
        System.out.println(list);
    }
}

输出结果:

 4.2比较器接口

比较器接口,代表一种可以进行比较的能力,任何类实现了比较器接口,并重写相应的方法,就表示这个类具备了比较大小的能力。

Java中提供了两个比较器接口:

(1)Comparable接口(内置比较器接口)  自然排序

一般写在实体类里,使得该类的某个属性可以进行比较。从而对该实体类的对象进行排序。如:学生在学校默认都是按学号进行排序。

(2)Comparator接口(外置比较器接口)  扩展排序

当我们使用别人编写好的一个类,该类中的比较器不符合我们的要求 ,就可以使用外置比较器。实现Comparator接口,重写comparaTo()方法即可。

如:学校运动会,按跑步成绩进行排序;一次摸底考试,按考试成绩排序,那么之前的按学号排序就不符合我们的需求,这时候就用到了外置比较器。

4.2.1内置比较器接口使用案例

package com.xja.test3;

/**
 * @描述:学生类(实体类)
 * @author:
 * @date:2023/2/2121:06
 * @version:
 **/
public class Stu implements Comparable<Stu>{
    private Integer sid;
    private String sname;
    private Double sscore;

    @Override
    public int compareTo(Stu o) {
        return this.sname.length()-o.sname.length();
    }

    public Stu() {
    }

    public Stu(Integer sid, String sname, Double sscore) {
        this.sid = sid;
        this.sname = sname;
        this.sscore = sscore;
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public Double getSscore() {
        return sscore;
    }

    public void setSscore(Double sscore) {
        this.sscore = sscore;
    }

    @Override
    public String toString() {
        return "Stu{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", sscore=" + sscore +
                '}';
    }
}
package com.xja.test3;

import java.util.ArrayList;
import java.util.Collections;

/**
 * @描述:内置比较器测试类
 * @author:
 * @date:2023/2/2121:13
 * @version:
 **/
public class StuTest1 {
    public static void main(String[] args) {
        ArrayList<Stu> list = new ArrayList<>();
        list.add(new Stu(2,"aa",90D));
        list.add(new Stu(1,"cccc",89D));
        list.add(new Stu(4,"b",78D));
        list.add(new Stu(3,"eee",99D));
        //排序前
        System.out.println(list);
        //排序后
        Collections.sort(list);
        System.out.println(list);
    }
}

输出结果:

[Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=1, sname='cccc', sscore=89.0}, Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=3, sname='eee', sscore=99.0}]
[Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=3, sname='eee', sscore=99.0}, Stu{sid=1, sname='cccc', sscore=89.0}]

4.2.2外置比较器接口使用案例

package com.xja.test3;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/**
 * @描述:内置比较器测试类
 * @author:
 * @date:2023/2/2121:13
 * @version:
 **/
public class StuTest1{
    public static void main(String[] args) {
        ArrayList<Stu> list = new ArrayList<>();
        list.add(new Stu(2,"aa",90D));
        list.add(new Stu(1,"cccc",89D));
        list.add(new Stu(4,"b",78D));
        list.add(new Stu(3,"eee",99D));
        //排序前
        System.out.println(list);
        //内置比较器排序后
        Collections.sort(list);
        System.out.println(list);

        //外置比较器使得按成绩排序
        Collections.sort(list, new Comparator<Stu>() {
            @Override
            public int compare(Stu o1, Stu o2) {
                if (o1.getSscore()>o2.getSscore()){
                    return 1;
                }else {
                    return -1;
                }
            }
        });
        System.out.println(list);
    }
}

输出结果:

[Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=1, sname='cccc', sscore=89.0}, Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=3, sname='eee', sscore=99.0}]
[Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=3, sname='eee', sscore=99.0}, Stu{sid=1, sname='cccc', sscore=89.0}]
[Stu{sid=4, sname='b', sscore=78.0}, Stu{sid=1, sname='cccc', sscore=89.0}, Stu{sid=2, sname='aa', sscore=90.0}, Stu{sid=3, sname='eee', sscore=99.0}]

 

标签:sname,list,sscore,Collection,Stu,sid,集合,public
From: https://www.cnblogs.com/zhengfuweilai/p/17138759.html

相关文章

  • 数据类型----元组、集合的内置方法
    一、元组tuple元组与列表类似,也是可以存多个任意类型的元素,不同之处在于元组的元素不能修改,即元组相当于不可变的列表,用于记录多个固定不允许修改的值,单纯用于取1.1定义......
  • acwing 合并集合
    题目一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:Mab,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个......
  • 列表的内置方法,字典的内置方法,元组,集合
    1.练习先进先出先进后出2.列表reverse颠倒列表内数据顺序sort从小到大排序(前提是:纯数字比较)列表的比较是比较索引对应位置的数据值,只要有一个比较出来,都不在往......
  • day08 元组字典集合
    day08元组集合字典 元组"""小括号括起来,内部存放多个元素,元组之间逗号隔开,元素不可改变,元素类型不能是任意的,"""​定义:t1=(11,22,33,44)#数据类型转......
  • 列表(list)内置方法补充、字典(dict)内置方法、元组(tuple)内置方法、集合(set)内置方
    目录一、列表(list)内置方法补充二、字典(dict)内置方法三、元组(tuple)内置方法四、集合(set)内置方法一、列表(list)内置方法补充#reverse()颠倒列表内元素顺序#so......
  • 数据类型-集合set-内置方法
    作用集合、list、tuple、dict一样都可以存放多个值,但是集合主要用于:去重、关系运算定义在{}内用逗号分隔开多个元素,集合具备以下三个特点:1:每个元素必须是不可变类......
  • Collections工具类的使用
    packageedu.wtbu;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collections;importjava.util.List;publicclassDemo01{publicstatic......
  • StringUtils常用方法集合
    StringUtils常用方法集合publicclasstest{​  /**  *unqualify:获取最后一个.之后的字符串  */  @Test  publicvoidtest31(){  ......
  • Collections工具类
    Collections是一个操作Set、List和Map等集合的工具类Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对......
  • Java集合Map接口详解——含源码分析
    前言关于集合中的Collection我们已经讲完了,接下来我们一起来看集合中的另一个大类:MapMap的实现类首先Map是一个接口,是一对键值对来存储信息的,K为key键,V为value值HashMapimpo......