Set接口 、 hashSet集合和linkedhashSet集合

193 阅读1分钟

Set接口:java.util.Set接口 extends Collection接口

Set接口的特点:

  1. 不允许存储重复的元素
  2. 没有索引,没有带索引的方法,也不能使用普通的for循环遍历

Set接口里面的方法和Collection一致

hashSet集合:java.util.HashSet集合 implements Set接口

HashSet集合的特点:

  1. 不允许存储重复的元素
  2. 没有索引,没有带索引的方法,也不能使用普通的for循环遍历
  3. 是一个无序的集合,存储元素和取出元素的顺序有可能不一致
  4. 底层是一个哈希表结构(查询速度非常的快)
  5. 遍历hashSet集合:
    • 使用迭代器
    • 使用增强for循环
  6. hashSet集合遍历代码演示:
package com.Java集合;

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

public class hashSet {

    public static void main(String[] args) {
        HashSet<Integer> hashset = new HashSet<>();
        hashset.add(1);
        hashset.add(3);
        hashset.add(2);
        hashset.add(5);
        hashset.add(5);

        //使用增强for循环遍历
        for (Integer integer : hashset) {
            System.out.println(integer);
        }

        System.out.println("======================");

        //使用迭代器遍历
        Iterator<Integer> it = hashset.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }

}

输出结果:

linkedhashSet集合:java.util.LinkedHashSet集合 extends HashSet集合

LinkedHashSet的特点:

  1. 不允许存储重复的元素
  2. 底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表记录(记录元素的存储顺序),保证元素有序

简单案例:

package com.Java集合;

import java.util.LinkedHashSet;


public class linkedhashSet {

    public static void main(String[] args) {

        LinkedHashSet<Integer> list = new LinkedHashSet<>();
        list.add(1);
        list.add(5);
        list.add(8);
        list.add(9);
        list.add(6);
        list.add(6);
        list.add(7);
        System.out.println(list);//[1, 5, 8, 9, 6, 7]
		for (Integer integer : list) {
            System.out.println(integer);
        }
    }

}

输出结果: