• 集合(5)


    容器选择

    取的元素很多,频繁的增删元素:linkedlist

    涉及到增删,不频繁:linkedlist,arraylist

    涉及到了增删,同时涉及到了查询:建议使用arraylist【一般情况增删不多,查询多】

    Set:没有顺序,元素不可以重复

    Set集合的功能和collection的功能是一致的。

    Set两大子类

    Hashset:底层数据结构是哈西表【hashset 中的顺序是按照哈希值的顺序存放的,与存的顺序无关】

    Treeset

    哈希值在比较的时候;如果哈希值相同会再判断元素对象是否相同(equals)。

    一般自定义的类通常要复写hashcode(),equals()【尤其是要加入到hashset里面的】

    HashSet删除和判断的依据:

    对于判断元素是否存在以及删除等操作,依赖的方法是元素的hashCode() 的equals();

    Arraylist判断元素是否存在以及删除,只依赖equals()【取决于数据结构】

    Hashset练习:姓名年龄相同为同一人

    class Person{
        String name;
        int age;
        Person(String name,int age)
        {
            this.name=name;
            this.age=age;
        }
        public int hashCode()
        {
            return name.hashCode()+age;
        }
        public boolean equals(Object obj)
        {
            Person p=(Person)obj;
            if(p.name==this.name&& p.age==this.age)
            {
                return true;
            }
            else{
                return false;
            }
            
        }
    }
    public class test{
        public static void main(String[] args)
        {
            HashSet hs = new HashSet();
            Person s1= new Person("zhangsan",12);
            Person s2= new Person("lisi",13);
            Person s3= new Person("zhangsan",12);
            hs.add(s1);
            hs.add(s2);
            Iterator it = hs.iterator();
            while(it.hasNext())
            {
                Person p=(Person) it.next();
                System.out.println(p.name+"***"+p.age);
                
            }
                    
            }
            
        }

    原理:hashTable在比较时先比较哈希码,如果哈希码相同就在调用equals方法,如果不相同就不会调用equals方法

    hashCode()中返回的hash值:

    name.hashCode()+age

    易出现两值不相同,但和相同的情况

    为了避免这种情况,通常age*39【乘的数任意】来保证哈希值的唯一性;

  • 相关阅读:
    1.开始学习ASP.NET MVC
    2.ASP.NET MVC 中使用Crystal Report水晶报表
    jQuery:SP.NET Autocomplete Textbox Using jQuery, JSON and AJAX
    JqGrid: paging int asp.net
    JqGrid: Add,Edit,Del in asp.net
    Python 3.4:Chromedrive,IEDriverServer,geckoDriver
    Python3.4:splinter or traceback
    postgresql-10.1-3-windows-x64 安装之后,起动pgAdmin 4问题(win10)
    Csharp:Paging Sorting Searching In ASP.NET MVC 5
    javascript:jQuery tablesorter 2.0
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8511154.html
Copyright © 2020-2023  润新知