• java set接口


    Hashset集合是set接口的子类

    底层是一个哈希表,不能存储重复的元素,通过hashcode方法和equals方法来保证数据的唯一性。取出数据时,不能保证数据的顺序和存入数据的顺序一致

    hashcode方法用来比较2个元素的哈希值,如果哈希值一样,就调用equals方法,比较元素的内容是否一样

    什么是哈希表呢? 

    哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,然后把这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表。

    当哈希值一样的时候,内容不一样的时候就会存储在同哈希值链表的下面。

    1 public static void method01(){
    2         HashSet<String> set =new HashSet<String>();
    3         set.add("abc");
    4         set.add("abc");
    5         System.out.println(set);
    6     }

    HashSet存储自定义元素

    HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一

    1 public static void method03(){
    2         HashSet<Person> set =new HashSet<Person>();
    3         set.add(new Person("a",20));
    4         set.add(new Person("b",30));
    5         set.add(new Person("c",40));
    6         for(Iterator it =set.iterator();it.hasNext();){
    7             System.out.println(it.next());
    8         }
    9     }
     1 package com.orcale.demo01;
     2 
     3 public class Person {
     4     private String name;
     5     private  int age;
     6     public Person(){};
     7     public Person(String name, int age) {
     8         this.name = name;
     9         this.age = age;
    10     }
    11     public String getName() {
    12         return name;
    13     }
    14     public void setName(String name) {
    15         this.name = name;
    16     }
    17     public int getAge() {
    18         return age;
    19     }
    20     public void setAge(int age) {
    21         this.age = age;
    22     }
    23     public String toString() {
    24         return "Person [name=" + name + ", age=" + age + "]";
    25     }
    26     public boolean equals(Object obj) {   //重写equals方法,先判断这2个的值是否一样,再判断这个值是不是空的,
                                如果都不是就判断这个值是不是Person类,因为是obj类父类,所有要向下转型,然后判断值是否一样
    27 if(this==obj){ 28 return true; 29 } 30 if(obj==null){ 31 return false; 32 } 33 if(obj instanceof Person){ 34 Person p=(Person) obj; 35 return name.equals(p.name)&&age==p.age; 36 } 37 return false; 38 } 39 40 public int hashCode() { 41 final int prime = 31; 42 int result = 1; 43 result = prime * result + age; 44 result = prime * result + ((name == null) ? 0 : name.hashCode()); 45 return result; 46 } 47 }

    LinkedHashSet集合是HashSet集合的子类,他取出数据的顺序和存入数据的顺序是一致的,数据也是唯一性

    1 public static void method05(){
    2         LinkedHashSet<Integer> set=new LinkedHashSet<Integer>();
    3         set.add(1);
    4         set.add(2);
    5         set.add(3);
    6         for(Integer i:set){
    7             System.out.println(i);
    8         }
    9     }

     

  • 相关阅读:
    20200807日报
    20200806日报
    《大道至简》读书感悟
    20200805日报
    20200804日报
    20200803日报
    20200802日报
    vue中mounted内如何调完异步方法再渲染
    小程序画布识别iPhone11
    np.meshgrid() 生成网格坐标函数
  • 原文地址:https://www.cnblogs.com/wangrongchen/p/9122461.html
Copyright © 2020-2023  润新知