zoukankan      html  css  js  c++  java
  • 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的子类

  • 相关阅读:
    Apollo(阿波罗)配置中心Java客户端使用指南使用指南
    文本编码范围
    Java也可以像python般range出连续集合
    TCP连接性能指标之TCP关闭过程(四次挥手)
    网络设备性能指标之pps
    Nacos 服务发现,注册及管理
    关于 Executor 和 ExecutorService
    NUMA 平台
    Java 11 新垃圾回收器 ZGC
    Java 13 新特性
  • 原文地址:https://www.cnblogs.com/cgj1994/p/9833147.html
Copyright © 2011-2022 走看看