java list中的对象去重原理

本文详细阐述了Java中SessionInfo类的实现及其在Session管理中的作用,并通过实例展示了如何使用HashSet集合来存储和操作SessionInfo对象,强调了在实际应用中正确管理会话的重要性。
/******************************************************************************* 
 * 
 * Copyright (c) Weaver Info Tech Co. Ltd 
 * 
 * SessionInfo 
 * 
 * app.backend.model.SessionInfo.java 
 * TODO: File description or class description. 
 * 
 * @author: Administrator 
 * @since:  2014-5-26 
 * @version: 1.0.0 
 * 
 * @changeLogs: 
 *     1.0.0: First created this class. 
 * 
 ******************************************************************************/  

  
import java.io.Serializable;  
  
/** 
 * @author Administrator 
 * 
 */  
@SuppressWarnings("serial")  
public class SessionInfo implements Serializable{  
    private int id;  
    private String url;  
    public int getId() {  
  
        return id;  
    }  
    public void setId(int id) {  
  
        this.id = id;  
    }  
  
    public String getUrl() {  
  
        return url;  
    }

    @Override
    public String toString() {
        return "SessionInfo{" +
                "id=" + id +
                ", url='" + url + '\'' +
                '}';
    }

    public void setUrl(String url) {
  
        this.url = url;  
    }  
  
    /* (non-Javadoc) 
     * @see java.lang.Object#hashCode() 
     */  
    @Override  
 public int hashCode() {  
        return id;  
    }  
  
    /* (non-Javadoc) 
     * @see java.lang.Object#equals(java.lang.Object) 
     */  
    @Override  
 public boolean equals(Object o) {  
        if (o == null) {  
            return false;  
        } else {  
            if (o.getClass() != this.getClass()) {  
                return false;  
            } else {  
                final SessionInfo s = (SessionInfo) o;  
                return s.id == this.id;  
            }  
        }  
    }  
}  

 

import java.util.*;

public class HashCodeTest {  
  

  
    public static void main(String[] args){  


        SessionInfo sessionInfo1 = new SessionInfo();
        SessionInfo sessionInfo2 = new SessionInfo();
        sessionInfo1.setId(1);
        sessionInfo2.setId(1);
        sessionInfo1.setUrl("test");
        sessionInfo2.setUrl("test");


        SessionInfo mSessionInfo = null;                    //实体类对象
        Set<SessionInfo> sessionList = new HashSet<SessionInfo>();  //声明set集合对象
        final List<SessionInfo> list = new ArrayList<SessionInfo>();//声明list集合对象


        sessionList.add(sessionInfo1);//将对象添加到Set集合中
        sessionList.add(sessionInfo2);//将对象添加到Set集合中
        list.addAll(sessionList);//将数据添加到list集合对象

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

    }



}  

 

### Java中遍历List复元素 在Java中,有多种方法可以实现对`List`的遍历以及操作。一种常见的方式是通过迭代器来遍历列表,并利用另一个集合结构如`Set`自动过滤掉复项。 对于遍历过程中的安全移除元素问题,在使用增强for循环或传统索引方式访问时直接调用`remove()`会抛出`ConcurrentModificationException`异常[^2]。因此推荐采用迭代器模式下的`Iterator.remove()`来进行安全删除。 下面展示了一种基于`HashSet`特性(不允许存储相同元素)完成任务的方法: ```java import java.util.*; public class ListDistinct { public static void main(String[] args) { // 创建原始包含复数据的列表 List<String> originalList = Arrays.asList("apple", "banana", "orange", "apple", "pear"); // 使用LinkedHashSet保持顺序的同时复条目 Set<String> set = new LinkedHashSet<>(originalList); // 将无复的结果转回新的ArrayList List<String> distinctedList = new ArrayList<>(set); System.out.println(distinctedList); // 输出结果为:[apple, banana, orange, pear] } } ``` 此代码片段展示了如何创建一个新的不带任何复成员的新列表。这里选择了`LinkedHashSet`而不是普通的`HashSet`是为了保留原有列表中元素出现的先后次序[^1]。 另一种更直观的手动检查法则是逐一检验目标对象是否已经存在于新容器内;如果不是,则将其加入其中。这种方法虽然效率较低但对于理解工作原理很有帮助: ```java import java.util.ArrayList; import java.util.List; public class ManualFilteringExample { public static void main(String[] args){ List<Integer> numbersWithDuplicates = Arrays.asList(1, 2, 3, 4, 5, 1, 2, 8, 9, 0); List<Integer> uniqueNumbers = new ArrayList<>(); for (Integer number : numbersWithDuplicates) { if (!uniqueNumbers.contains(number)) { uniqueNumbers.add(number); } } System.out.println(uniqueNumbers.toString()); // 打印最终不含复数值的列表 } } ``` 上述例子中,程序遍历了一个整数类型的列表,并且只当发现当前处理的对象尚未被记录过才会执行添加动作。这种方式能够有效地达到目的但是性能表现可能不如借助内置的数据结构那么高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值