美文网首页
Collection

Collection

作者: 景悦 | 来源:发表于2020-05-28 17:15 被阅读0次
  • 根接口Collection

常用子接口
 1. List
  实现类:ArrayList、Vector、LinkedList
 2. Set
  实现类:HashSet、TreeSet

  • List
    ArrayList:底层数据结构是数组,效率高,用于查询,线程不安全(size会变,复合操作不具有原子性)
    LinkedList:底层数据结构是链表,用于插入和删除,线程不安全
    Vector:底层数据结构是数组,线程安全 ,实际使用还是要加锁,一般不用。

  • Set:无序,元素唯一不能重复。

hashSet:

  1. 底层数据是哈希表
  2. 通过两个方法hashCode()和equals()保证元素的唯一性,方法自动生成
  3. 子类LinkedHashSet底层数据结构是链表和哈希表,由链表保证元素有序,由哈希表保证元素唯一。
    使用场景:使用HashSet类随机产生10个不重复的1到20的不重复随机数实例
package test_11_hashset;

import java.util.HashSet;
import java.util.Random;

//使用HashSet类随机产生10个不重复的1到20的不重复随机数
public class HashSetDemo {
    public static void main(String[] args) {
        Random r=new Random();
        
        HashSet <Integer> hs=new HashSet<Integer>();
        
        while(hs.size()<10) {
            hs.add((r.nextInt(20)+1));
        }
        for(Integer i:hs) {
            System.out.println(i);
        }
    }

}

treeSet:

  1. 底层数据是红黑二叉树
  2. 排序方式:自然排序、比较器排序
  3. 通过比较返回值是否为0来保证元素的唯一性。
    使用场景:TreeSet类中自然排序和比较器排序实例
    Student类
package test11_Treeset;
//此处实现的为自然排序接口,如果仅仅使用比较器排序此接口可以不实现
public class Student implements Comparable<Student>{
    private int age;
    
    private String name;
    
    public Student() {
        super();
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public int compareTo(Student s) {
        //此处的this和s前后位置改变会影响排序方式
        int num1=this.age-s.age;
        
        int num2=num1==0?this.name.compareTo(s.name):num1;
        
        return num2;
    }

    
}

1、自然排序

package test11_Treeset;

import java.util.TreeSet;

//TreeSet类存储对象,自然排序
//规定:按照年龄进行排序
public class TreeSetDemo1 {
    public static void main(String[] args) {
        
        TreeSet<Student> ts=new TreeSet<Student>();
        
        Student s1=new Student("zfliu",18);
        Student s2=new Student("zfliu",20);
        Student s3=new Student("zfliu",18);
        Student s4=new Student("ZFLIU",18);
        Student s5=new Student("Java",18);

        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
        
        
        for (Student s:ts) {
            System.out.println(s.getName()+s.getAge());
        }
        
    }
}

2、比较器排序

package test11_Treeset;

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

//TreeSet类存储对象,比较器排序
//规定:按照年龄进行排序
public class TreeSetDemo2 {
    public static void main(String[] args) {
        TreeSet<Student> ts=new TreeSet<Student>(new Comparator<Student>() {

            //匿名内部类实现比较器排序接口
            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("zfliu",18);
        Student s2=new Student("zfliu",20);
        Student s3=new Student("zfliu",18);
        Student s4=new Student("ZFLIU",18);
        Student s5=new Student("Java",18);

        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
        
        
        for (Student s:ts) {
            System.out.println(s.getName()+s.getAge());
        }
    }
}

参考:https://blog.csdn.net/zfliu96/article/details/83476493

相关文章

网友评论

      本文标题:Collection

      本文链接:https://www.haomeiwen.com/subject/ghvaahtx.html