美文网首页
Java基础笔记总结(10)-集合(2)Set集合 HashSe

Java基础笔记总结(10)-集合(2)Set集合 HashSe

作者: 吵吵先生 | 来源:发表于2019-01-25 21:08 被阅读0次

    Set集合 -----保证元素唯一

    HashSet实现了Set接口,不保证set的迭代顺序,允许存储null值

    HastSet<String> hs = new HashSet<>();

    如果是重复元素值,会返回false

    HashSet的继承体系有重写toString()

    由于Set集合中无索引,不可以重复,存取顺序不一致(无序)。----->位置随机存放

    只要能用迭代器迭代,既可以使用foreach

    --------------------------------------------------------------------------------------------------------------------------------------------

    存储自定义对象,并保证元素的唯一性(重写hashCode()和equals()方法)

    如果不重写,说明其内部元素

    public  boolean equals(Object obj){

      Person p = (Person)obj;

    return this.name.equals(p.name);

    }

    public in hashCode(){

    final int NUM = 38;

    return name.hashCode()*NUM+age;

    }

    HashSet有筒结构,优化结构

    ------------------------------------------------------------------------------------------------------------------------------------------

    HashSet如何保证元素唯一性的原理

    hashCode中为什么prime是31,31是质数,能被1和自身整除,这个数字不大不小,且数字好计算 是2的五次方-1,2左移五位再减1

    该方法 属性相同的对象返回值必须相同,属性不同的返回值尽量不同

    如果两个引用中,自己指向自己,则返回true

    如果传入对象为null,调用引用指向返回引用,会返回false

    再比较两个对应的字节码文件是否是同一个,需要判断

    再向下转型,比较类的属性值

    true不存,false存入

    -------------------------------------------------------------------

    LinkedHashSet 存取的顺序一致,并且不能写入重复元素

    LinkedHashSet<String> ihs = new LinkedHashSet<>();

    产生1-20个随机数,并且不能重复

    Random random = new Random();

    HashSet<Integer> hs = new HashSet<>();

    while(hs.size()<10){

        hs.add(random.nextInt(20)+1);

    }

    -------------------------------------------------------------------

    去除字符串重复字符

    String str = "aaabbbcccddd";

    char[] arr = str.toCharArray();

    HashSet<Character> hashSet = new HashSet<>();

    for(char c :arr){

        hashSet.add(c);

    }

    -------------------------------------------------------------------

    去除集合中的重复元素

    LinkedHashSet<String> linkedHashSet  = new LinkedHashSet<>();

    List<String> list = new List<String>();

    linkedHashSet.addAll(list);

    list.clear();

    list.addAll(linkedHashSet);

    -------------------------------------------------------------------

    TreeSet 存储

    TreeSet<Integer> ts = new TreeSet<>();

    1、不能存入重复数据

    2、对数据进行自动排序

    二叉树 小的存储左边,大的存储右边,相等不存储

    利用compareTo方法进行比较的返回值

    返回0 集合只有一个元素

    返回-1 存储在元素左边

    返回1 存储在元素右边

    需要在类上实现Comparable<T>的接口

    public int compareTo(Person o){

      return this.age-o,age;

    }

    -------------------------------------------------------------------------

    TreeSet的比较器排序

    需求 将字符串按照长度进行排序

    class CompareByLen extends Object implements Comparator<String>{

      public int compare(String o1,String o2){

    int num = o1.length-o2.length;

            return num ==0?s1.compareTo(s2):num ;

    }

    TreeSet<String> ts = new TressSet<>(new CompareByLen());

    注意新进入的元素相当于s1 原来的元素相当于s2

    对List用该方法只需要改写

    return num ==0?1:num;

    相关文章

      网友评论

          本文标题:Java基础笔记总结(10)-集合(2)Set集合 HashSe

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