先看集合框架图:
Set有HashSet和TreeSet两种实现类。
先看Set:
特点:无序、无下标、元素不可重复
方法:全部继承自Collection中的方法
增、删、遍历、判断与collection一致
看代码:
- package com.collections.set;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Set;
- /**
- * set的使用
- * 特点:(1)无序(2)不能重复
- * @author 华子
- */
- public class Demo01 {
- public static void main(String[] args) {
- Set<String> set = new HashSet<>();
- // 添加
- set.add("小米");
- set.add("苹果");
- set.add("华为");
- set.add("华为");
- System.out.println(set.size());
- System.out.println(set.toString());
- // 删除
- // set.remove("苹果");
- // System.out.println("删除后:"+set.size());
- // System.out.println(set.toString());
- // 遍历
- // 增强for
- for (String s :set
- ) {
- System.out.println(s);
- }
- System.out.println("------------------------");
- // 迭代器
- Iterator<String> iterator = set.iterator();
- while (iterator.hasNext()){
- String s = iterator.next();
- System.out.println(s);
- }
- System.out.println("------------------------");
- for (String s :set) {
- System.out.println(s);
- }
- // 判断
- System.out.println(set.contains("华为"));
- System.out.println(set.isEmpty());
- }
- }
复制代码 和之间的集合使用方法类似。
HasSet【重点】
存储结构:哈希表(数组+链表+红黑树)
存储过程(重复依据)
- 根据hashCode计算保存的位置,如果位置为空,直接保存,若不为空,进行第二步
- 再执行equals方法,如果equals为true,则认为是重复,否则形成链表
特点
存储过程:
<ul>基于HashCode计算元素存放位置 <ul>
利用31这个质数,减少散列冲突 <ul>
31提高执行效率 31 * i = (i |