文档章节

集合——Set集合

Bug-Killer
 Bug-Killer
发布于 2016/04/13 01:07
字数 566
阅读 55
收藏 3

Set集合

    Set集合中元素是无序的,不可以重复,在Set集合中存储的对象,不存在两个对象equals比较为true的情况。

    1)HashSet和TreeSet是Set集合中的两个实现类,分别用hash表和二叉树的方式实现Set集合,HashSet是通过散列集合实现Set的。

    2)Set集合中没有get(int index)方法,不能像在List集合中,通过下标去得到对应的元素。如果想要的到元素,则使用Iterator迭代器。

    3)向Set集合中添加元素 可以使用add()方法,但是增加的元素不会再集合末尾添加,因为Set集合中元素是无序的。

Set<String> set = new HashSet<String>() ;    //多态
set.add("a");
set.add("b");
set.add("c");
//普通循环,使用Iteraotr迭代器迭代
Iterator it = (String)set.iterator() ;
while(it.hasNext()){
    String str = (String)it.next() ;
    System.out.println(str) ;
}
//增强for循环遍历Set集合
for(String str:set){
    System.out.println(str) ;
}

    4)hashCode对HashSet的影响。如果我们不重写hashCode,那么我们使用的就是Object提供的,而该方法是返回地址。也就是不同的对象,hashCode不同。

    5)对于重写了equals方法的对象,强烈要求重写继承自Object类的hashCode方法,因为是否重写hashCode方法对操作集合有影响。

    6)重写hashCode需要注意两点:

        ①与equals方法的一致性,通过equals方法比较返回为true的对象,其hashCode的方法返回的对象一致。

        ②hashCode方法返回的值应该符合hash算法要求。

    7)boolean contains(Object obj)方法:查看对象是否存在Set集合中。

Set<Point> set = new HashPoint<Point>() ;
//Point point = new Point(1,2) ;    set.add(point) ;
set.add(new Point(1,2));
set.add(new Point(3,4));
System.out.println(set.contains(new Point(1,2)));

    8)

Set<Point> set= new HashSet<Point>() ;
Point p1 = new Point(1,2);
Point p2 = new Point(3,4);
System.out.println("两个对象是否是一个对象"+(p1==p2));
System.out.println("两个对象内容是否相同"+(p1.equals(p2)));
System.out.println("两个对象hashCode是否相同"+(p1.hashCode()==p2.hashCode()));
    set.add(p1);
    set.add(p2);
   System.out.println("hashSet集合中元素个数"+set.size()) ;
   for(Point p:set){
       System.out.println(p) ;
   }

    9)Set集合中保存不同对象时,不会保存既hashCode()相同又equals相同的对象,缺一不可,否则HashSet不认为他们是重复的值。





© 著作权归作者所有

下一篇: Mysql——外键
Bug-Killer
粉丝 5
博文 74
码字总数 46700
作品 0
海淀
程序员
私信 提问
Java工具包框架图与集合框架思维导图

Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、...

孟飞阳
2016/06/25
884
0
Guava 集合类

不可变集合类 为什么要使用不可变集合 不可变对象有很多优点,包括: 当对象被不可信的库调用时,不可变形式是安全的; 不可变对象被多个线程调用时,不存在竞态条件问题 不可变集合不需要考...

icecrea
2017/11/21
0
0
find_in_set(str,strlist)

我感觉这个有点像 正则中的 regexp FINDINSET(str,strlist) 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被‘,’符号...

嘿嘿!!
2016/01/25
0
0
数据结构(集合和数组)

在使用JAVA的时候经常用到集合类(有时也称容器类),下面对常用的容器类进行一下总结。首先看一张图,了解一下集合类的结构以及他们之间的关系: 一、Collection接口 Collection接口是 Set 、...

微尘鉴
2016/02/22
48
0
Redis中5种数据结构的使用场景介绍

一、redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码。目前目标是吃透 redis 的数据结构。我们都知道,在 redis 中一共有5...

君满楼001
2017/12/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向对象编程

1、类和对象 类是对象的蓝图和模板,而对象是实例;即对象是具体的实例,类是一个抽象的模板 当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定...

huijue
今天
8
0
redis异常解决 :idea启动本地redis出现 jedis.exceptions.JedisDataException: NOAUTH Authentication required

第一次安装在本地redis服务,试试跑项目,结果却出现nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required错误,真是让人头疼 先检查一...

青慕
今天
10
0
Spring 之 IoC 源码分析 (基于注解方式)

一、 IoC 理论 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。 二、IoC方式 Spring为IoC提供了2种方式,一种是基于xml...

星爵22
今天
25
0
Docker安装PostgresSql

Docker安装PostgresSql 拉取docker镜像 # docker pull postgres:10.1010.10: Pulling from library/postgres9fc222b64b0a: Pull complete 38296355136d: Pull complete 2809e135bbdb: Pu......

Tree
今天
8
0
内容垂直居中

方法一: 采用上下 padding 形式,将内容放置在垂直居中 .line { padding: 2% 0; text-align: center; height: 5px;} <div class="line"> 内容垂直居中</div> 方法二: 采......

低至一折起
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部