• Java set接口


    set接口(存放无序,不重复的元素

    (1)HashSet集合:采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法
    在给哈希表中存放对象时,会调用对象的hashCode方法,算出对象在表中的存放位置,这里需要注意,
    如果两个对象hashCode方法算出结果一样,这样现象称为哈希冲突,这时会调用对象的equals方法,
    比较这两个对象是不是同一个对象,如果equals方法返回的是true,那么就不会把第二个对象存放在哈希表中,
    如果返回的是false,就会把这个值存放在哈希表中;
    (2)HashSet集合存储API类时:已经重写了hashCode方法和equals方法,如String类、Integer类等;
    HashSet集合存储自定义类时:需要重写hashCode方法和equals方法,来确保HashSet集合中的对象唯一;

    	public static void main(String[] args) {
    		HashSet<String> set = new HashSet<String>();
    		Object obj = new Object();
    		System.out.println(obj.hashCode());
    		set.add("111");
    		set.add("222");
    		set.add("333");
    		set.add("333");
    		for (String s : set) {
    			System.out.println(s);//哈希值
    			System.out.println(s.hashCode());//是String重写后的值
    		}
    		
    	}
    

      

    自定义类元素

    package day09;
    
    public class Person {
    	private String name;
    	private Integer age;
    //	构造方法
    	public  Person(String name,Integer age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Integer getAge() {
    		return age;
    	}
    	public void setAge(Integer age) {
    		this.age = age;
    	}
    	public String toString() {
    		return "Person [name=" + name + ", age=" + age + "]";
    	}
    	public int hashCode() {
    		return name.hashCode()+age;
    	}//重写 hashCode方法
    
    	public boolean equals(Object obj) {
    		if(obj ==null) {
    			return false;
    		}
    		if(obj ==this) {
    			return true;
    		}
    		if(obj instanceof Person) {
    			Person p =(Person)obj;
    			return p.name.equals(this.name)&&p.age.equals(this.age);
    		}
    		return false;
    	}
    	
    	
    }
    

      重写前重写后

    LinkedHashSet:
    LinkedHashSet集合保证元素的存入和取出的顺序;

    public static void main(String[] args) {
    //		不能存重复元素,但可以有序遍历
    		LinkedHashSet<String>set =  new LinkedHashSet<String>();
    		set.add("c");
    		set.add("b");
    		set.add("z");
    		set.add("z");
    		for(String s:set) {
    			System.out.println(s);
    		}
    	}
    

      

    LinkedHashSet是HashSet的子类

  • 相关阅读:
    【Python3网络爬虫开发实战】 1-开发环境配置
    Elasticsearch 基本介绍及其与 Python 的对接实现
    深度学习 GPU环境 Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.
    React组件方法中为什么要绑定this
    中级前端开发推荐书籍
    20万行代码,搞得定不?
    华为云数据库TaurusDB性能挑战赛,50万奖金等你来拿!
    00036_private
    使用spring等框架的web程序在Tomcat下的启动顺序及思路理清
    http304状态码缓存设置问题
  • 原文地址:https://www.cnblogs.com/cgj1994/p/9833147.html
Copyright © 2020-2023  润新知