java基础笔记(10)----集合之set集合
- set接口特点:
- 存储任意Object元素
- 无序,无下标,元素内容不可以重
- 方法:
- 继承父接口Collection中的所有方法
- 遍历:
- 有两种遍历方法,foreach遍历和迭代遍历
forEach遍历
|
Set<Object> set = new HashSet<Object>(); for (Object obj: set) { if(obj instanceof Integer){ int aa= (Integer)obj; }else if(obj instanceof String){ String aa = (String)obj } } |
迭代遍历
|
- 实现类:
- HashSet
为了保证hashset中自定义类型的对象,内容相同 拒绝加入集合,解决方案:
第一步:覆盖hashCode方法
确保相同的对象 返回 相同的hashCode值。
为了提高效率 尽量保证只有相同的对象 才拿到相同的hashCode值。
通常,所有属性进行拼接形成int值,如果是引用类型 则调用其hashCode方法。
|
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((clazz == null) ? 0 : clazz.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } |
第二步:覆盖equals方法
对象的hashCode值相同时,才会调用equals方法,如果内容相同返回true,代表当前对象是重复对象,应该 被拒绝加入集合。
|
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (clazz == null) { if (other.clazz != null) return false; } else if (!clazz.equals(other.clazz)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } |
- hashset的特点:
- 底层使用数据结构的hash算法实现的,因此具有很好的存取,查找的性能。
- hashSet是线程不安全,所以它相对于线程安全的更快一些。
- hashSet值可以为null。
- 不存在顺序
- TreeSet
实现了SortedSet接口(是Set的子接口)
注意:集合元素如果是自定义类型,该类型必须实现java.lang.Comparable接口。
- TreeSet的特点:
- 底层使用数据结构红黑树算法进行维护的,因此它的性能相对hashset来说,更差一些,因为它内部会自动进行排序操作。
- TreeSet也是线程不安全
- 排序分为自然排序和定制排序,自然排序是treeset内部会对add进来的值进行自动排序,定制排序可以对排序的条件进行限制。
- 总结:
- 以上写了一些set集合的基本用法,以及set集合的常用实现类
- 注意 hashset, treeset都是线程不安全的,所以要保证线程安全,要使用collections下面的syschronizedSet来进行同步操作。
java基础笔记(10)----集合之set集合的更多相关文章
- Java基础笔记10
类的设计分析: 1.根据需求抽取属性.(名词几乎都是属性) 2.属性私有化(private) 3.生成setter和getter方法 4.可以根据需要添加构造函数. 5.根据需求抽取其他方法.(动词几 ...
- java基础-IO流对象之Properties集合
java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- JAVA自学笔记10
JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...
- JAVA基础(10)——IO、NIO
转载:http://blog.csdn.net/weitry/article/details/52964948 JAVA基础系列规划: JAVA基础(1)——基本概念 JAVA基础(2)——数据类型 ...
- java基础笔记(9)----集合之list集合
集合 对于集合的理解,集合是一个容器,用于存储和管理其它对象的对象 集合,首先了解所有集合的父接口----collection 特点:存储任意object元素 方法 boolean add(Objec ...
- java基础第十二篇之集合、增强for循环、迭代器和泛型
Collection接口中的常用方法: * 所有的子类子接口都是具有的 * 集合的方法:增删改查 * * public boolean add(E e);//添加元素 返回值表示是否添加成功 * pu ...
- java基础(7):自定义类、ArrayList集合
1. 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类. 我们可以把类的类型为两种: 第一种,Java为我们提供好 ...
- 黑马程序员----java基础笔记上(毕向东)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...
随机推荐
- Linux显示按文件名降序文件
Linux显示按文件名降序文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls -lr 总用量 56 drwxr-xr-x 3 youhaidong yo ...
- Java中的三目运算符
1.问题背景 以下代码运行的结果是: A.hai B.1987 C.1988 D.以上答案都不对 /** * 三目运算符 * A.hai * B.1987 * C.198 ...
- CentOS中配置lvm存储
磁盘添加 vmware workstation 虚拟机为例 1.关闭虚拟机,在虚拟机设置中添加3块硬盘. 2.首先创建物理卷 pvcreate /dev/sdb /dev/sdc Physical ...
- Blending, Bootstrap
听林轩田老师的<机器学习技法>,Lecture 7讲到model的blending. 理解了一个之前一直模棱两可的概念:bootstrap. 先说一下什么是blending.在机器学习中, ...
- freemarker之数组(十八)
1.设计思路 (1)声明一个数组 (2)打印数组中的元素 2.设计源码 <#--freemarker数组--> <#assign nums=[12,34,56,78,90,54,23 ...
- jsTree树形菜单分类
这里我演示的jsTree是基于ABP框架 ,展示部分代码,话不多说首先看效果如: 1:引入JS <link href="/jstree/themes/default/style.css ...
- python与机器学实践-何宇健 源代码及过程中遇到的问题
# -*- coding: utf-8 -*-"""Spyder EditorThis is a temporary script file.""&q ...
- SVN的安装以及和eclipse的结合使用
SVN概述 l 通常软件开发由多人协作开发,如果对代码文件.配置文件.文档等没有进行版本控制,将会出现很多问题: l 备份多个版本,占用磁盘空间大 l 解决代码冲突困难 l 容易引发BUG l 难于追 ...
- (luogu P4012)深海机器人问题 [TPLY]
网页链接 https://www.luogu.org/problemnew/show/4012 做题背景 在不久的将来,人工智能发展使得人类大量失业,也使得现在的我们做[深海机器人问题]做得想死... ...
- 【Luogu2444】病毒(AC自动机)
[Luogu2444]病毒(AC自动机) 题面 洛谷 题解 如果存在一个无限长的串 证明可以在\(AC\)自动机上找到一个环 然后在上面可以无限跳 所以构建\(AC\)自动机 在上面跑\(dfs\)就 ...