这里写目录标题

  • 1.Set集合
  • 1.1Set集合的特点
  • 1.2HashSet集合的特点
  • 2.Set集合排序
  • 2.1 TreeSet
  • 2.2 自然排序Comparable
  • 2.3学生成绩排序实例
  • 2.3.1 描述
  • 2.3.2 书写
  • 3.泛型
  • 3.1 描述
  • 3.2 泛型类举例
  • 3.3 泛型方法举例
  • 3.4泛型接口


1.Set集合

1.1Set集合的特点

元素存取无序
没有索引、只能通过迭代器或增强for循环遍历
不能存储重复元素
举例说明:

Set<String> set = new HashSet<String>();
//添加元素
set.add("hello");
set.add("world");
//不包含重复元素的集合
//增强for循环遍历
for(String s : set) {
System.out.println(s);
}

1.2HashSet集合的特点

1.对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
2.没有带索引的方法,所以不能使用普通for循环遍历
3.可使用增强for循环
举例说明:

HashSet<String> hs = new HashSet<String>();
//添加元素
hs.add("hello");
hs.add("world");
hs.add("java");
//遍历
for(String s : hs) {
System.out.println(s);
}

2.Set集合排序

元素有序,可以按照一定的规则进行排序,具体排序方式取决于构造方法
TreeSet():根据其元素的自然排序进行排序
TreeSet(Comparator comparator) :根据指定的比较器进行排序。

2.1 TreeSet

举例说明:

//创建集合对象
TreeSet<Integer> ts = new TreeSet<Integer>();
//添加元素
ts.add(10);
ts.add(40);
ts.add(30);
ts.add(50);
ts.add(20);
ts.add(30);
for(Integer i : ts) {
System.out.println(i);
}
}
//结果是自然排序输出

2.2 自然排序Comparable

根据指定的比较器进行排序:增加或者减少
步骤:
1.类继承Comparable
2.重写compareTo()

2.3学生成绩排序实例

2.3.1 描述

案例需求
存储学生对象并遍历,创建TreeSet集合使用无参构造方法
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
实现步骤
用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写.

2.3.2 书写

方法一:

public class Student implements Comparable<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 void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student s) {
//年龄相同时,按照姓名的字母顺序排序
int num2 = num==0?this.name.compareTo(s.name):num;
return num2;
}
}

方法二:
可写到main函数里面,引用时添加重新方法

TreeSet<Student> students=new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                int num1=s1.getAge()-s2.getAge();
                int num2=num1==0?s1.getName().compareTo(s2.getName()):num1;
                return num2;
            }
        });

main函数

import java.util.Comparator;
import java.util.TreeSet;

public class treeset {
    public static void main(String[] args) {
        TreeSet<Student> students=new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                int num1=s1.getAge()-s2.getAge();
                int num2=num1==0?s1.getName().compareTo(s2.getName()):num1;
                return num2;
            }
        });
        Student s1=new Student("wang",18);
        Student s2=new Student("gang",19);
        Student s3=new Student("jia",17);
        Student s4=new Student("ia",17);

        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);

        for (Student s:students){
            System.out.println(s.getName()+s.getAge());
        }

    }
}

3.泛型

3.1 描述

:不具体指什么数据类型,需要用什么类型直接引用什么数据类型,避免了要引用各种数据类型的代码冗余情况。

3.2 泛型类举例

泛型类定义:修饰符 class 类名<类型> { }
student类

public class Student1<T> {
    private T t;
    public T getT() {//无参和构造
        return t;
    }
    public void setT(T t) {//有参构造
        this.t = t;
    }
}

main函数调用

public class Demo1 {
    public static void main(String[] args) {
    //String 类型
        Student1<String> s1=new Student1();
        s1.setT("xxi");
        System.out.println(s1.getT());
      // Integer类型
        Student1<Integer> s2=new Student1<Integer>();
        s2.setT(20);
        System.out.println(s2.getT());
    }
}

3.3 泛型方法举例

修饰符 <类型> 返回值类型 方法名(类型 变量名) { }

public class Generic {
public <T> void show(T t) {
System.out.println(t);
}
}

3.4泛型接口

//定义Generic接口

public interface Generic<T> {
    void show(T t);
}

//实现类接口

public class Genericimpl<T> implements Generic<T> {
    @Override
    public void show(T t){
        System.out.println(t);
    }
}

//测试类

public class Genericdemo {
    public static void main(String[] args) {

        Genericimpl<String> g1=new Genericimpl<String>();
        g1.show("xoxo");

        Genericimpl<Integer> g2=new Genericimpl<Integer>();
        g2.show(20);
    }
}