List 数据去冗 LinkedHashSet

本文探讨了如何使用LinkedHashSet去除List数据的冗余。LinkedHashSet作为HashSet的子类,保证了元素的唯一性和插入顺序。同时强调,在处理List<TestBean>时,为了正确去重,必须重写equals()和hashCode()方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对List数据的去冗,分两种情况,话不多说,直接上代码:

第一种:

package com.example.mylist;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<TestBean> testBeanList=new ArrayList<>();
        testBeanList.add(new TestBean("111","222"));
        testBeanList.add(new TestBean("111","222"));
        testBeanList.add(new TestBean("111","222"));
        testBeanList.add(new TestBean("111","222"));
        testBeanList.add(new TestBean("111","222"));
        testBeanList.add(new TestBean("111","
### Java LinkedHashSet 数据结构的特点 `LinkedHashSet` 是 `Set` 接口的一个实现类,它继承自 `HashSet` 并扩展了其功能。它的特点是既保持了 `HashSet` 的元素唯一性,又通过内部使用的双向链表维护了元素的插入顺序[^1]。 #### 特点总结 1. **元素唯一性**:如同其他 `Set` 集合一样,`LinkedHashSet` 不允许重复的元素存在。 2. **有序性**:与无序的 `HashSet` 不同,`LinkedHashSet` 维护了元素的插入顺序,这得益于其内部基于 `LinkedHashMap` 的实现机制[^3]。 3. **性能表现**:由于额外维护了一个双向链表来记录元素的插入顺序,`LinkedHashSet` 在某些操作上的效率可能稍低于纯哈希表实现的 `HashSet`,但在大多数情况下仍然非常高效[^4]。 --- ### 使用方法 以下是关于如何使用 `LinkedHashSet` 的一些常见方法: 1. **创建实例** 可以通过默认构造函数或者带有初始容量和加载因子的构造函数来创建一个 `LinkedHashSet` 对象。 ```java // 创建一个空的 LinkedHashSet LinkedHashSet<String> set = new LinkedHashSet<>(); // 带有指定初始容量和负载因子的构造器 LinkedHashSet<String> customSet = new LinkedHashSet<>(10, 0.75f); ``` 2. **添加元素** 使用 `add()` 方法向集合中添加新元素。如果尝试添加已存在的元素,则不会改变集合的内容并返回 `false`。 ```java set.add("Apple"); set.add("Banana"); set.add("Orange"); ``` 3. **删除元素** 调用 `remove()` 方法可以从集合中移除特定的元素;调用 `clear()` 则会清空整个集合中的所有元素。 ```java set.remove("Banana"); // 移除单个元素 set.clear(); // 清空集合 ``` 4. **遍历集合** 支持多种迭代方式,包括增强型 `for-each` 循环以及传统的迭代器模式。 ```java for (String fruit : set) { System.out.println(fruit); } ``` 5. **复制集合** 如果需要创建一个新的 `LinkedHashSet` 来保存现有集合的内容,可以通过传递旧集合作为其参数给新的构造函数完成此目的,也可以利用 `clone()` 方法生成浅拷贝版本。 ```java LinkedHashSet<String> copySet = new LinkedHashSet<>(set); // 构造函数方式 LinkedHashSet<String> clonedSet = (LinkedHashSet<String>) set.clone(); // Clone 方式 ``` --- ### 示例代码 下面是一个完整的示例程序展示如何定义、填充、修改及打印一个 `LinkedHashSet`: ```java import java.util.LinkedHashSet; public class Main { public static void main(String[] args) { // 初始化 LinkedHashSet LinkedHashSet<String> fruits = new LinkedHashSet<>(); // 添加元素到集合 fruits.add("Apple"); fruits.add("Banana"); fruits.add("Cherry"); // 打印原始集合内容 System.out.println("Original Set: " + fruits); // 尝试添加重复项 boolean isAdded = fruits.add("Apple"); System.out.println("Is 'Apple' added again? " + isAdded); // 删除某个元素 fruits.remove("Banana"); System.out.println("After removing Banana: " + fruits); // 复制集合 LinkedHashSet<String> copiedFruits = new LinkedHashSet<>(fruits); System.out.println("Copied Set: " + copiedFruits); // 遍历集合 System.out.print("Iterating through the set: "); for (String fruit : fruits) { System.out.print(fruit + " "); } } } ``` 运行上述代码将会输出如下结果: ``` Original Set: [Apple, Banana, Cherry] Is 'Apple' added again? false After removing Banana: [Apple, Cherry] Copied Set: [Apple, Cherry] Iterating through the set: Apple Cherry ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值