美文网首页
Set接口的特点及HashSet

Set接口的特点及HashSet

作者: 牛倩贱 | 来源:发表于2019-05-29 21:35 被阅读0次

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

//使用HashSet存储字符串并遍历

/*Set集合的特点:

无序存放(存储和读取的顺序有可能不一样)

没有索引和list不同

不允许元素重复(元素是惟一的)*/

public class HashSetDemo {

public static void main(String[] args) {

//创建集合对象

//HashSet<String> hs = new HashSet<String>();

Set<String> set = new HashSet<String>();//父类接口引用指向子类对象,因为接口不能实例化所以后面必须跟new  HashSet

//不过需要注意的是,如果使用父类的引用去指向子类的对象,那就没办法去使用子类成员的方法。

//添加集合元素

set.add("Hello");

set.add("World");

//集合转成数组,然后遍历集合对象

/*Object[] obj = set.toArray();

for(int x=0;x<obj.length;x++){

System.out.println(obj[x]);

}*/

//迭代器遍历集合

/*Iterator<String>  it = set.iterator();

while(it.hasNext()){

String s = it.next();

System.out.println(s);

}*/

//增强for遍历

for(String s:set){

System.out.println(s);

}

}

}

2.使用HashSet存储自定义对象并遍历:

package set_day01;

//使用HashSet存储自定义对象并遍历

//存储的自定义对象无法去重,所以下面重写了equals方法和HashCode方法

/*HashSet的add()方法不能去重的原因:

* 1.通过查找源码发现,HashSet的add方法,首先会使用当前集合的每一个元素

* 和新添加的元素进行hash值(也可以说是地址值的比较),如果hash值不一样,则直接添加新的元素。

* 2.如果hash值一样,则进行比较地址值或者使用equals方法进行其他东西的比较,

* 所有东西的比较结果都不一样,则添加元素。

* 实现HashSet存储自定义对象并去重的步骤

* 第一步:重写hashCode方法,默认返回相等,先比较hash值,如果相等

* 则进行第二步,执行equals方法

* 第二步:重些equals方法,默认返回true,即说明两个元素是相等的

* 不予以添加。

*

*/

import java.util.HashSet;

public class HashSetDemo2 {

public static void main(String[] args) {

//创建集合对象

HashSet<Student> hs = new HashSet<Student>();

//创建元素对象

Student s = new Student("liqianqian",18);

Student s2 = new Student("fanhaolan",18);

Student s3 = new Student("fanhaolan",18);

//添加元素对象

hs.add(s);

hs.add(s2);

hs.add(s3);

//遍历集合对象,使用增强for

for (Student student : hs) {

System.out.println(student);

}

}

}

class Student{

String name;

int  age;

public Student(String name,int age){

this.name=name;

this.age=age;

}

@Override

public String toString() {

return "Student [name=" + name + ", age=" + age + "]";

}

@Override

public boolean equals(Object obj) {

Student s = (Student) obj;//向下转型,可以获取子类特有成员

//比较年龄是否相等,如果不相等,返回false

if(this.age !=s.age){

return false;

}

//比较姓名是否相等,如果相等返回false

if(!(this.name).equals(s.name)){

return false;

}

//默认返回true,说明两个学生时相等的

return true;

}

@Override

public int hashCode() {

// TODO Auto-generated method stub

return 1;

}

}

相关文章

  • Map与Set

    一、Set接口的特点 使用HashSet存储字符串并遍历 Set set = new HashSet ();//...

  • Set接口的特点及HashSet

    import java.util.HashSet; import java.util.Iterator; impo...

  • java集合(二)——集合 Set

    一、HashSet类HashSet简介 HashSet是Set接口的典型实现,实现了Set接口中的所有方法,并没有...

  • java基础-day17-Set和String

    Set和String 1. Set接口 1.1 Set接口特征和概述 1.2 HashSet存储过程 1.2.1 ...

  • Java基础语法_Day19

    一、HashSet集合 Set接口的特点 Set体系的集合:A:存入集合的顺序和取出集合的顺序不一致B:没有索引C...

  • HashSet源码分析

    HashSet HashSet概述### HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)...

  • java 集合 4 - HashSet

    HashSet 参考文章:HashMap和HashSet的区别 HashSet实现了Set接口,它不允许集合中有重...

  • Java Collection系列之:HashSet、Linke

    Set接口 整体Collection&Map的实现关系: HashSet HashSet基于key-value形式...

  • Java 容器学习

    Set 实现Set接口包括 HashSet, TreeSet, LinkedHashSet 。在没有其它限制的情况...

  • HashSet

    HashSet HashSet实现了Set接口,表示的是无序的不可重复的元素的集合。 构造函数1、HashSet(...

网友评论

      本文标题:Set接口的特点及HashSet

      本文链接:https://www.haomeiwen.com/subject/hrthbqtx.html