常用Set集合

Set集合的特点

​ Set接口下的集合都会有以下特点

  • 不能存储重复元素
  • 没有索引

HashSet

HashSet集合的特点

  • 底层数据结构是哈希表
  • 存储元素的顺序和遍历获取出来的顺序可能不一致
  • 没有索引
  • 集合中不能存储重复元素

创建对象

HashSet<元素数据类型> set = new HashSet<>();
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
}

常用方法

方法 解释
boolean add(E e) 添加元素,如果元素添加不成功 返回值代表是否添加成功
boolean remove(Object o) 删除元素 ,返回值代表删除元素是否成功
boolean contains(Object o) 判断元素是否存在
int size() 获取集合的大小
    public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
//添加元素
boolean f = set.add("愚");
set.add("生");
set.add("浅");
set.add("末");
System.out.println(f);
}

我们打断点调试一下:

可以看到愚生浅末四个字符已经装入set,且f为true证明添加成功。

我们再试试删除:

 public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
//添加元素
set.add("愚");
set.add("生");
set.add("浅");
set.add("末");
boolean f = set.remove("生");
}

可以看到set已经没有生了,且f为true代表删除成功。

判断是否存在:

    public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
//添加元素
set.add("愚");
set.add("生");
set.add("浅");
set.add("末");
boolean f = set.contains("末");
}



末是存在于set的,所以返回值为true。

获取集合的大小:

 public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
//添加元素
set.add("愚");
set.add("生");
set.add("浅");
set.add("末");
//获取集合的大小
int size = set.size();



添加了愚生浅末四个字符,所以可以得到size是4.

遍历

1.转换为数组遍历

 public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("愚");
set.add("生");
set.add("浅");
set.add("末");
String[] strings = set.toArray(new String[0]);
for (int i = 0; i < strings.length; i++) {
System.out.println(strings[i]);
}
}

结果:



前面说过:存储元素的顺序和遍历获取出来的顺序可能不一致。

2.使用迭代器遍历

    public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("愚");
set.add("生");
set.add("浅");
set.add("末");
Iterator<String> it = set.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
}

结果:

3.foreach遍历

 public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("愚");
set.add("生");
set.add("浅");
set.add("末");
for (String s : set) {
System.out.println(s);
}
}

结果:

常用Map集合

Map集合的概述

Map接口是双列集合的顶层接口,下面是Map接口的定义

interface Map<K,V>  K:键的类型;V:值的类型

​ 存储的数据必须包含key和value。

​ key和value在Map集合中是一一对应的关系。一个key对应一个value。

​ key在map集合中是不会重复的。

HashMap

HashMap集合的特点

  • 底层数据结构是哈希表
  • 存储元素的顺序和遍历获取出来的顺序可能不一致
  • key不会重复

创建对象

HashMap<key的数据类型,value的数据类型> map = new HashMap<>();

例如:

    public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
HashMap<String,Integer> map = new HashMap<>();
}

常用方法

方法 解释
V put(K key, V value) 添加元素,如果key不存在就添加,如果key
V get(Object key) 根据key获取对应的value值返回。如果key不存在就返回null
V remove(Object key) 根据key删除map中对应的键值对。并且把删除的value返回
boolean containsKey(Object key) 判断key是否存在
int size() 集合中键值对的对数
void clear() 清空集合中的所有键值对
    public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
// map.put()
//添加元素
map.put("name", "愷龍");
map.put("age", "20");
String v = map.put("name", "愚生浅末");//将原来的愷龍替换为愚生浅末
String name = map.get("name");//获取名字:愷龍
String age = map.get("age");//获取age:20
//删除元素
String delV = map.remove("age");//返回值为20
//判断key是否存在
if(map.containsKey("name")){
String agea = map.get("name");//null
System.out.println(agea.length());
}
//size
int size = map.size();
map.clear();
}

遍历

1.使用entrySet遍历

​ map集合的entrySet方法可以获取一个Set集合,集合中存放的是Entry对象,一个Entry对象相当于一个键值对。我们可以遍历set集合拿到Entry对象,然后获取出里面的键和值。

使用迭代器遍历entrySet

    public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("name","愷龍");
map.put("age","20");
Set<Map.Entry<String, String>> entries = map.entrySet();
//使用迭代器遍历entrySet
Iterator<Map.Entry<String, String>> it = entries.iterator();
while (it.hasNext()){
Map.Entry<String, String> entry = it.next();
System.out.println(entry.getKey()+"="+entry.getValue());
}
}

结果:

使用foreach遍历entrySet

    public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("name","愷龍");
map.put("age","20");
Set<Map.Entry<String, String>> entries = map.entrySet();
//使用foreach遍历entrySet
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey()+"="+entry.getValue());
}
}

结果:

2.使用keySet遍历

​ map集合的keySet方法可以获取一个Set集合,集合中存放的是所有的key。我们可以遍历set集合拿到key对象,然后通过key获取对应的value。

    public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("name","愷龍");
map.put("age","20");
Set<String> keys = map.keySet();
for (String key : keys) {
System.out.println(key+"="+map.get(key));
}
}

结果:

HashMap的key去重原理

​ HashMap在添加元素的时候会判断集合中是否有key和本次存入的key相同。判断的时候主要是通过hashCode方法和equals方法来进行判断的。hashCode相同,并且equals判断也相同就会认为是同一个key。

​ 所以如果我们要存储到HashMap中的key是一个自定义的类型。就需要根据情况判断下是否需要重写下hashCode方法和equals方法。重写的时候使用IDEA的提示即可。

public class Student {
private int age;
private String name;
public String getName(){
return name = this.name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age = this.age;
}
public void setAge(int age){
this.age = age;
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
} @Override
public int hashCode() {
return Objects.hash(age, name);
}
}

注意:HashSet存储数据其实也是使用了HashMap。所以如果往HashSet中存储自定义对象也要看情况是否需要重写hashCode方法和equals方法。

如图片失效等情况请参阅公众号文章:https://mp.weixin.qq.com/s/NLKGamezcB3nnQ3BgEDc9g

欢迎关注我的公众号:愚生浅末,一起交流学习。

Java 常用Set集合和常用Map集合的更多相关文章

  1. Android(java)学习笔记102:Map集合功能概述

    下面通过代码引入Map集合:如下 package cn.itcast_01; import java.util.HashMap; import java.util.Map; /* * 作为学生来说,是 ...

  2. Android(java)学习笔记41:Map集合功能概述

    1. 下面通过代码引入Map集合: 如下 package cn.itcast_01; import java.util.HashMap; import java.util.Map; /* * 作为学生 ...

  3. java学习第18天(map集合)

    Map集合是将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 存储的是键值对形式的元素,键唯一,值可以重复,有点类似于数据库中的主键加数据.主要功能有: A:添加功能 put ...

  4. Android(java)学习笔记105:Map集合的遍历之键值对对象找键和值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

  5. Android(java)学习笔记104:Map集合的遍历之键找值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

  6. Android(java)学习笔记103:Map集合的获取功能

    package cn.itcast_01; import java.util.Collection; import java.util.HashMap; import java.util.Map; i ...

  7. 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合

    package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...

  8. Java学习之路(九):Map集合

    Map集合概述和特点 Map是属于java.util的一个接口Map<k,v> k:映射所维护的键的类型 v:映射值的类型 Map是将键映射到值的对象.一个映射不能包含重复的键:每个键最多 ...

  9. Android(java)学习笔记44:Map集合的遍历之键值对对象找键和值

    1. Map集合的遍历之 键值对对象找 键和值: package cn.itcast_01; import java.util.HashMap; import java.util.Map; impor ...

  10. Android(java)学习笔记43:Map集合的遍历之键找值

    1. Map集合的遍历之键找值  package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.u ...

随机推荐

  1. git 将本地文件推送到远程分支的分支

    1.  新建文件夹复制远程分支 2. 切换到远程分支 3. 推送到远程 添加到暂存区,先运行 " git add . " 查看文件状态                     在运 ...

  2. JavaWeb和WebGIS学习笔记(三)——GeoServer 发布shp数据地图

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  3. windows 安装 kalfka 并快速启动

    1.安装Java 环境 https://www.java.com/zh_CN/ 直接下载安装即可 (如果之前有配置过java环境 可以先跳过此步骤,但是如果运行的时候报错就需要把之前的jdk环境变量删 ...

  4. 你不知道的Python容器

    你不知道的Python容器 你不知道的Python容器 散列表 ChainMap MappingProxyType 线性表 堆 参考资料 昨天阅读了<Python Tricks: The Boo ...

  5. python数据可视化-matplotlib入门(6)-从文件中加载数据

    前几篇都是手动录入或随机函数产生的数据.实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化. 比如之前python基础(12)介绍打开文件的方式,可直接读取文件中的数据,扩大了我们的数 ...

  6. [RPC学习]Dubbo+nacos实现动态更新内存RTree

    1.背景 服务架构一般都是从 单体架构 -> 微服务架构 -> 分布式架构 的迭代,我上一家公司就是在业务发展到一定规模时,开始拆老的单体服务,按业务维度拆成多个微服务,服务之间用的是HT ...

  7. 【microPython与esp8266】之一——呼吸灯与PWM

    呼吸灯与pwm pwm是什么? PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式: 简而言之,使 ...

  8. css的flex布局调试

    学习经验-css的flex布局 今天遇到一个小问题 在给三个div布局时,设置父元素display:flex 此时三个div的宽度均为50%,他们并没有超出屏幕的宽度,还是撑满了父元素. 为什么呢? ...

  9. 现有教学数据库JX_DB,作业

    现有教学数据库JX_DB,数据库有以下三个基本表: 学生表student,它由学号sno.姓名sname.性别sex.出生日期Bdate.所在系dept五个属性构成.其中,学号不能为空,值是唯一的: ...

  10. maven install resources failed: newPosition < 0: (-1 < 0)

    添加以下代码在 pom.xml 中,具体参阅这里 <build> <plugins> <plugin> <groupId>org.apache.mave ...