HashSet&LinkedHashSet&TreeSet的简单使用

Java集合框架详解
本文深入探讨了Java集合框架中的HashSet、LinkedHashSet和TreeSet的特性与用法,包括元素的添加、遍历、排序及转换等操作,为读者提供了丰富的代码实例。
hashSet:集合,无索引,不可重复
HashSet<String> hs = new HashSet<>();    //创建HashSet对象,使用泛型,只能存储String字符串
boolean b1 = hs.add("a");
boolean b2 = hs.add("a");        //当向set集合中存储重复元素的时候返回为false
System.out.println(hs);            //HashSet的继承体系中有重写toString方法
for (String string : hs) {        //也可以使用增强for循环遍历
    System.out.println(string);
}
hs.size();                //集合中元素的个数




LinkedHashSet:底层是链表实现的,因为是HashSet的子类,所以也是保证元素唯一的,与HashSet的原理一样
LinkedHashSet<String> lhs = new LinkedHashSet<>();    //操作与HashSet大同小异




ArrayList<String> list = new ArrayList<>();
LinkedHashSet<String> lhs = new LinkedHashSet<>();
lhs.addAll(list);        //将List集合中所有的元素添加到LinkedHashSet集合
list.clear();            //将list集合中的元素清除





TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {            //在创建TreeSet时就重写compare函数,加入的元素会自动根据定义排序
    @Override
    public int compare(String s1, String s2) {
        int num = s1.compareTo(s2);                    //比较内容为主要条件
        return num == 0 ? 1 : num;                    //保留重复
    }
});





HashSet<String> names = new HashSet<String>();
names.add("Asker");
names.add("Crak");
names.add("Bayliss");
names.add("Mohna");
names.add("Dina");
System.out.println("HashSet before sorting : " + names);
//将HashSet转换为List,然后使用Collections.sort()进行排序
List<String> tempList = new ArrayList<String>(names);
Collections.sort(tempList);
System.out.println("HashSet element in sorted order : " + tempList);

 

### 特点 - **HashSet**:它不保证元素的顺序,元素的存储位置由其 `hashCode` 值决定,具有快速的插入、删除和查找操作,是一种快速的 `Set` 实现。在一个 `HashSet` 中,没有重复元素,这也是使用 `Set` 最主要的原因之一 [^4]。 - **LinkedHashSet**:集合同样根据元素的 `hashCode` 值来决定元素的存储位置,同使用链表维护元素的次序,使得元素看起来像是以插入顺序保存的。在迭代访问 `Set` 中的全部元素,性能比 `HashSet` 好,但是插入性能稍微逊色于 `HashSet` [^1]。 - **TreeSet**:会对元素进行排序,默认按照元素的自然顺序排序,能提供一个已经排好序的 `Set` [^4]。 ### 使用方法 以下是使用 Java 语言对这三种 `Set` 的基本使用示例: ```java import java.util.HashSet; import java.util.LinkedHashSet; import java.util.TreeSet; import java.util.Set; public class SetExample { public static void main(String[] args) { // 使用 HashSet Set<String> hashSet = new HashSet<>(); hashSet.add("D"); hashSet.add("E"); hashSet.add("F"); hashSet.add("A"); hashSet.add("B"); hashSet.add("C"); System.out.println("HashSet 顺序: " + hashSet); // 使用 LinkedHashSet Set<String> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add("B"); linkedHashSet.add("A"); linkedHashSet.add("D"); linkedHashSet.add("E"); linkedHashSet.add("C"); linkedHashSet.add("F"); System.out.println("LinkedHashSet 顺序: " + linkedHashSet); // 使用 TreeSet Set<String> treeSet = new TreeSet<>(); treeSet.add("D"); treeSet.add("E"); treeSet.add("F"); treeSet.add("A"); treeSet.add("B"); treeSet.add("C"); System.out.println("TreeSet 顺序: " + treeSet); } } ``` ### 区别 - **顺序方面**:`HashSet` 不保证元素的顺序;`LinkedHashSet` 按元素的插入顺序保存元素;`TreeSet` 会对元素进行排序,默认按自然顺序 [^1][^2][^3][^4]。 - **性能方面**:`HashSet` 在插入、删除和查找操作上性能较好;`LinkedHashSet` 在迭代访问全部元素性能比 `HashSet` 好,但插入性能稍逊;`TreeSet` 由于要进行排序,插入和删除操作相对较慢 [^1][^4]。 - **使用场景方面**:如果需要快速的 `Set`,应使用 `HashSet`;如果需要一个已排好序的 `Set`,则使用 `TreeSet`;如果想按插入顺序读取元素,应选择 `LinkedHashSet` [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值