Java HashSet简介及代码演示

本文介绍了计算机科学中的核心数据结构,包括栈、队列、数组、链表、红黑树等,并详细探讨了Set和Map集合的特点及应用。特别强调了不同数据结构在存储和检索方面的优劣。

List Set Map
数据结构:
数据存储的常用结构
栈 队列 数组 链表 红黑树

栈 : stack,又称堆栈,它是运算受限的线性表,
它的限制主要体现在仅允许在标的的一段进行插入和删除操作
不允许在其他任何位置进行添加.查找.删除等操作
它的存取有以下特点:
1.先进后出(存进去的元素,要在它的后面的元素依次取出后,才能取出该元素)
类似弹夹
2.栈的入口,出口都在栈的最顶端

有两个名词需要注意:
压栈:就是存元素,把元素存储到的栈的最顶端,栈中已有的元素依次向栈底方向移动一个位置
弹栈:就是取元素,把栈的最顶端位置元素取出,栈中已有的元素依次向栈顶方向移动一个位置

队列:
queue 简称队,它和堆栈是一样的,也是一种运算受限的线性表,
它的限制是仅允许在标的一段进行插入,而在标的的另一端进行删除
它的存取有以下特点:
1.先进先出(即,存进去的元素,要在它前面的元素依次取出后,才能取出该元素)
2.队列的入口和出口各占一端


数组:
Array:是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间中存储元素.
// 快递柜 和 宾馆中的房间
数组的存储有以下特点:
1.查找元素快
2.增删元素慢
2.1指定索引位置可以删除元素
2.2指定索引位置可以添加元素
链表.二叉树.红黑树

Set集合:
特点:
1.不允许存储重复的元素
2.最多包含一个 null
3.通常认为Set接口元素是无序的
Set接口的子类: Java.util.HashSet 和
Java.util.LinkedHashset

HashSet集合:

HashSet继承自Collection,有较多相同的方法

它存储的元素是不允许重复,
并且元素是无序的(存取顺序不一致)

HashSet的底层实现需要有Java.util.HashMap支持
它的元素是根据对象的哈希值来确定在集合中元素的存储位置,

因此存取和查找性能较好
保证元素唯一依赖于重写的hashCode 和 equals 方法,来保证元素唯一    


在JDK 1.8 之前,哈希表底层采用数组+链表结构存储数据
在JDK 1.8 之后,哈希表底层采用数组+链表+红黑树实现,
              当链表长度超过阈值(8),将链表转换成红黑树存储
                 

链表结构可以保证元素是有序的

LinkedHashSet集合
有序,元素不重复
其他和 HashSet 集合一样

常说的链表结构:单向链表和双向链表
单向列表是无序的,双向列表是有序的

Map集合:
特点:
1. 将键映射到值的对象.
一个映射不能包含重复的键,每个键最多只能映射到一个值(V不能对多个K)
2. 提供三种Collection 视图
键集.值集,或键值映射关系集的形式查看某个映射的内容
3.

    通过无参构造创建空映射?
    禁止存储 null键和null值
    
    TreeMap是有序的
    HashMap是无序的
    
    重点实现类
    1.HashMap
    2.TreeMap
    3.LinkedHashMap
    4.Attributes
    
  
    
    
是一个接口
Map<K,V> 两种泛型 映射:一一对应,不会出现一对多   人和身份证    主机名和IP地址
一个映射不能包含重复的键
package HashSetDemo;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

// 定义一个HashSetDemo
public class HashSetDemo {
    /*
    boolean add(E e) 添加元素
    void clear()清空集合元素
    Boolean contains(Object O) 是否包含指定的元素
    Boolean isEmpty() 判断指定的集合是否为空
    Boolean remove(Object o) 从集合中删除指定的元素
    Iterator<E>  iterator() 获取一个迭代器
    int size() 获取集合中的元素个数
    T[] toArray(T[] t) 转换成指定类型的数组
     */
    public static void main(String[] args) {
        // 创建一个Set集合
        // 灰色代表可以省略
        Set<String> set = new HashSet<String>();

        // 添加元素
        set.add("小明");
        set.add("小王");
        set.add("小刘");
        set.add("小周");
        set.add("小王");

        // 从集合中取元素1,索引,2迭代器
        // Set没有索引,只能用迭代器
        Iterator<String> iterator = set.iterator();

        // 判断是否有下一个元素
        while (iterator.hasNext()) {
            String temp = iterator.next();
            System.out.println(" " + temp + " ");
            /*
            小刘 小周 小明 小王
            输出结果 无序 且不重复
             */
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值