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的子类

  • 相关阅读:
    PAT Basic 1077 互评成绩计算 (20 分)
    PAT Basic 1055 集体照 (25 分)
    PAT Basic 1059 C语言竞赛 (20 分)
    PAT Basic 1072 开学寄语 (20 分)
    PAT Basic 1049 数列的片段和 (20 分)
    蓝桥杯BASIC-13 数列排序
    蓝桥杯入门——3.序列求和
    蓝桥杯入门——2.圆的面积
    蓝桥杯入门——1.Fibonacci数列
    树的总结(遍历,BST,AVL原型,堆,练习题)
  • 原文地址:https://www.cnblogs.com/cgj1994/p/9833147.html
Copyright © 2011-2022 走看看