java set接口
Posted 呐呐呐那
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
以上是关于java set接口的主要内容,如果未能解决你的问题,请参考以下文章