当前位置: 首页 > news >正文

setj集合

Hashset集合

HashSet是一种在多种编程语言里都存在的数据结构,它主要用于存储唯一元素,也就是集合里不会有重复的元素。在 Java 里,HashSet是Set接口的一个实现类,它基于哈希表来存储元素。

HashSet常用方法

①:add(Object o):向Set集合中添加元素,不允许添加重复数据。

②:size():返回Set集合中的元素个数

package set;

import java.util.HashSet;

public class settest {
	public static void main(String[] args) {
		HashSet<String> set = new HashSet<String>();
		set.add("abc");
		set.add("111");
		System.out.println(set);
		System.out.println(set.size());
	}

}

 注意:不会按照保存的顺序存储数据(顺序不定),遍历时不能保证下次结果和上次相同。且向HashSet集合中添加元素,HashSet add方法实质是map全局变量调用了put方法,将数据存到了key,因为HashMap的 key不允许,所以HashSet添加的元素也不允许重复。

③.remove(Object o): 删除Set集合中的obj对象,删除成功返回true,否则返回false。

④.isEmpty():如果Set不包含元素,则返回 true。

package set;

import java.util.HashSet;

public class settest {
	public static void main(String[] args) {
		HashSet<String> set = new HashSet<String>();
		set.add("abc");
		set.add("111");
		System.out.println(set.isEmpty());
	    System.out.println(set.remove("111"));
	    System.out.println(set);
	}

}

 ⑤.clear(): 移除此Set中的所有元素。

package set;

import java.util.HashSet;

public class settest {
	public static void main(String[] args) {
		HashSet<String> set = new HashSet<String>();
		set.add("abc");
		set.add("111");
		  System.out.println(set);
	        set.clear();
	        System.out.println(set);
	}

}

 ⑥.iterator():返回在此Set中的元素上进行迭代的迭代器。

package set;

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

public class settest {
	public static void main(String[] args) {
		HashSet<String> set = new HashSet<String>();
		set.add("abc");
		set.add("111");
		Iterator<String> iterator=set.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}

 ⑦.contains(Object o):判断集合中是否包含obj元素。

package set;

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

public class settest {
	public static void main(String[] args) {
		HashSet<String> set = new HashSet<String>();
		set.add("abc");
		set.add("111");
		System.out.println(set.contains("111"));
		
		System.out.println(set.contains("222"));
	}
}

 ⑧:加强for循环遍历Set集合:

package set;

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

public class settest {
	public static void main(String[] args) {
		HashSet<String> set = new HashSet<String>();
		set.add("abc");
		set.add("111");
		for(String i:set) {
			System.out.println(i);
		}
	}
}

LinkedHashSet集合 

LinkedHashSet是一种特殊的集合类,它结合了链表和哈希表的特性。在 Java 里LinkedHashSet是HashSet的一个子类,它继承了HashSet的特性,同时使用链表维护元素的插入顺序,这意味着它可以保证元素按照插入的顺序进行迭代。

LinkedHashSet的基本使用

①.创建 LinkedHashSet

  • 使用默认构造函数创建一个空的 LinkedHashSet。
  • 可以指定初始容量和负载因子。
package set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;

public class settest {
	public static void main(String[] args) {
		
        // 创建一个空的 LinkedHashSet
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();

        // 创建具有初始容量的 LinkedHashSet
        LinkedHashSet<Integer> linkedHashSetWithCapacity = new LinkedHashSet<>(10);

        // 创建具有初始容量和负载因子的 LinkedHashSet
        LinkedHashSet<Double> linkedHashSetWithLoadFactor = new LinkedHashSet<>(10, 0.75f);
	}
}

2. 添加元素

  • 使用 add() 方法添加元素。
  • 如果元素已存在,则不会重复添加。
        linkedHashSet.add("Apple");
        linkedHashSet.add("Banana");
        linkedHashSet.add("Cherry");
        linkedHashSet.add("Apple"); // 重复元素,不会添加
        System.out.println(linkedHashSet);

 

3. 删除元素

  • 使用 remove() 方法删除指定元素。
  • 使用 clear() 方法清空所有元素。
package set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;

public class settest {
	public static void main(String[] args) {
		
        // 创建一个空的 LinkedHashSet
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();

        // 创建具有初始容量的 LinkedHashSet
        LinkedHashSet<Integer> linkedHashSetWithCapacity = new LinkedHashSet<>(10);

        // 创建具有初始容量和负载因子的 LinkedHashSet
        LinkedHashSet<Double> linkedHashSetWithLoadFactor = new LinkedHashSet<>(10, 0.75f);
        linkedHashSet.add("Apple");
        linkedHashSet.add("Banana");
        linkedHashSet.add("Cherry");
        linkedHashSet.add("Apple"); // 重复元素,不会添加
        System.out.println(linkedHashSet); // 输出: [Apple, Banana, Cherry]
        linkedHashSet.remove("Banana");
        System.out.println(linkedHashSet); // 输出: [Apple, Cherry]

        linkedHashSet.clear();
        System.out.println(linkedHashSet); // 输出: []
	}
}

4. 检查元素是否存在

  • 使用 contains() 方法检查是否包含指定元素。
package set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;

public class settest {
	public static void main(String[] args) {
		
        // 创建一个空的 LinkedHashSet
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();

        // 创建具有初始容量的 LinkedHashSet
        LinkedHashSet<Integer> linkedHashSetWithCapacity = new LinkedHashSet<>(10);

        // 创建具有初始容量和负载因子的 LinkedHashSet
        LinkedHashSet<Double> linkedHashSetWithLoadFactor = new LinkedHashSet<>(10, 0.75f);
        linkedHashSet.add("Apple");
        linkedHashSet.add("Banana");
        linkedHashSet.add("Cherry");
        linkedHashSet.add("Apple"); // 重复元素,不会添加
        System.out.println(linkedHashSet); // 输出: [Apple, Banana, Cherry]
        linkedHashSet.remove("Banana");
        System.out.println(linkedHashSet); // 输出: [Apple, Cherry]
//
//        linkedHashSet.clear();
//        System.out.println(linkedHashSet); // 输出: []
        boolean containsApple = linkedHashSet.contains("Apple");
        System.out.println("Contains Apple: " + containsApple); // 输出: Contains Apple: true
	}
}

5. 获取大小

  • 使用 size() 方法获取集合中元素的数量。
int size = linkedHashSet.size();
System.out.println("Size: " + size); // 输出: Size: 2

6. 遍历 LinkedHashSet

  • 使用 for-each 循环遍历。
  • 使用 Iterator 遍历。
// 使用 for-each 循环遍历
for (String fruit : linkedHashSet) {
    System.out.println(fruit);
}

// 使用 Iterator 遍历
Iterator<String> iterator = linkedHashSet.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

7. 转换为数组

  • 使用 toArray() 方法将 LinkedHashSet 转换为数组。
 String[] array = linkedHashSet.toArray(new String[0]);
for (String s : array) {
    System.out.println(s);
}

TreeSet集合

TreeSet是一种常用的集合类,在 Java 里,TreeSet 是 Set 接口的一个具体实现类,它基于红黑树(一种自平衡的二叉搜索树)来存储元素。

TreeSet的基本使用

①.插入是按字典序排序的

public class Test {
    public static void main(String[] args) {
        TreeSet ts=new TreeSet();
        ts.add("agg");
        ts.add("abcd");
        ts.add("ffas");
        Iterator it=ts.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

②.如果插入的是自定义对象 需要让类实现 Comparable 接口并且必须要重写compareTo

class Person implements Comparable{
    
    String name;
    int age;
    Person(String name,int age)
    {
        this.name=name;
        this.age=age;
    }

    @Override
    public int compareTo(Object o) {
        Person p=(Person)o;
        //先对姓名字典序比较 如果相同 比较年龄
        if(this.name.compareTo(p.name)!=0) {
            return this.name.compareTo(p.name);
        }
        else
        {
            if(this.age>p.age) return 1;
            else if(this.age<p.age) return -1;
        }
        return 0;
    }

}

public class Test {
    public static void main(String args[])
    {
        TreeSet ts=new TreeSet();
        ts.add(new Person("agg",21));
        ts.add(new Person("abcd",12));
        ts.add(new Person("ffas",8));
        ts.add(new Person("agg",12));
        Iterator it=ts.iterator();
        while(it.hasNext())
        {
            Person p=(Person)it.next();
            System.out.println(p.name+":"+p.age);
        }
    }
}

 

HashSet、LinkedHashSet、TreeSet的使用场景

HashSet:HashSet的性能基本上比LinkedHashSet和TreeSet要好,特别是添加和查询,这也是用的最多的两个操作

LinkedHashSet:LinkedHashSet的查询稍慢一些,但是他可以维持元素的添加顺序。所以只有要求当插入顺序和取出顺序一致的时候 才使用LinkedHashSet。

TreeSet:只有在需要对元素进行排序时使用

 

http://www.dtcms.com/a/113526.html

相关文章:

  • 1.5 基于改进蛇优化VGG13SE故障诊断方法的有效性分析
  • Python实现链接KS3,并将文件数据上传到KS3
  • 【spring Cloud Netflix】OpenFeign组件
  • 第二十九章:Python-mahotas库:图像处理的高效工具
  • 使用 pytest-xdist 进行高效并行自化测试
  • PHP的垃圾回收机制
  • 我的创作历程:从不情愿到主动分享的成长
  • 用北太天元脚本解决了关于双曲线的求离心率对应的参数、等腰三角形条件下的点坐标和向量点积条件下的参数范围
  • 如何判断栈生长的方向
  • SDL显示YUV视频
  • 快速从零部署一个DeepSeek-R1服务
  • NAS原理与技术详解:从基础概念到实践应用
  • 基础知识补充篇:关于数据不可修改
  • 功能测试和性能测试的区别有哪些?
  • 使用Geotools中的原始方法来操作PostGIS空间数据库
  • java高并发------守护线程Daemon Thread
  • Redis数据结构之ZSet
  • P3654 First Step (ファーストステップ)
  • Linux:(五种IO模型)
  • 基于SSM的高校宿舍水电管理系统
  • 0201线性回归-机器学习-人工智能
  • 开篇 - 配置Unlua+VsCode的智能提示、调试以及学习方法
  • 【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
  • 《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析
  • 如何理解分类(Category)?Kotlin 扩展是何方神圣?C/C++编译器的C/C++扩展
  • 关于 Spring自定义缓存管理器 的详细说明,包含两种实现方式的对比和代码示例,并附表格总结
  • 复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect
  • 多线程代码案例 - 2
  • 高速电路 PCB 设计要点二
  • 【代码模板】如何用FILE操作符打开文件?fopen、fclose