java list中的对象去重原理

/*******************************************************************************
 *
 * 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));
        }

    }

}  
时间: 2024-12-26 17:11:19

java list中的对象去重原理的相关文章

Java 开发中的对象拷贝

前言 在 Java 开发中,很多时候需要将两个属性基本相同的对象进行属性复制,比如 DO 转 VO等等. 本文主要介绍自己实现的简易拷贝工具类与 Spring 提供的属性拷贝的对比. Spring 提供的属性拷贝 在 Spring 中直接调用 BeanUtils.copyProperties();即可. 它的核心通过循环 target 的所有方法名,然后在 source 中找到对应的方法名,最后通过反射从 source 中获取并写入 target 中. Spring 没有通过 java.lang

痴情研究java内存中的对象

前记: 几天前,在浏览网页时偶然的发现一道以前就看过很多遍的面试题,题目是:"请说出'equals'和'=='的区别",当时我觉得我还是挺懂的,在心里答了一点(比如我们都知道的:'=='比较两个引用是否指向同一个对象,'equals'比较两个对象的内容),可是总觉得心里有点虚虚的,因为这句话好像太概括了,我也无法更深入地说出一些.于是看了几篇别人的技术博客,看完后我心里自信地说,我是真的懂了:后来根据我当时的理解,就在eclipse中敲了些代码验证一下,发现有些运行的结果和我预期的又不

JS中数组对象去重

JS数组去重 JS中对数组去重最好不要用unique方法,该方法主要是对dom节点数组的去重,如果对普通的数组元素去重只会去掉与之相邻的重复元素,也就是如果数组中还有不相邻的重复元素存在,将不会被去掉,而且有时候会出现问题,所以对数组去重可以利用如下方法: 先对数组a进行遍历,同时创建一个新的数组对象arr for (var i=0 ;i<a.length;i++) {    if (arr.indexOf(a[i]) == -1) { arr.push(a[i]) } } 经过这样处理后的数组

java虚拟机中的对象的创建

当虚拟机遇到一条new 指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且这个符号引用代表类的是否已加载.解析和初始化过.如果没有必须执行类的加载过程. 在类加载检查过后,接下来虚拟机将为新生对象分配内存.对象所需内存大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从java堆中化分出来.java内存的分配方式分为"指针碰撞"(Bump the Pointer)和"空闲列表"(Free List)两种方式. 指

Java代码中new对象的过程在jvm内存中的操作

1.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 2.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 3.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量

java 遍历中为对象添加元素

publie Object getaddress(){ List<MemberAddress> memberAddressList = new ArrayList<MemberAddress>(); try { // 通过memberId查询用户所有地址 memberAddressList = memberAddressService.getByMemberId(member.getId()); } catch (Exception e) { return new APIResul

js中数组对象去重的方法

var arr = [{ key: '01', value: '乐乐' }, { key: '02', value: '博博' }, { key: '03', value: '淘淘' },{ key: '04', value: '哈哈' },{ key: '01', value: '乐乐' }]; // 方法1:利用对象访问属性的方法,判断对象中是否存在key var result = []; var obj = {}; for(var i =0; i<arr.length; i++){ if(

怎么对数组中的对象去重?

var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4hewePU95UHtpMl3eE81uS74NC-6zu-Rtnw4Ix", "gender": "AAAAAA.doc" }, { "name": "ZYTA", "age": "Y13x

【基础】Java 8 中的常量池、字符串池、包装类对象池

1 - 引言 2 - 常量池 2.1 你真的懂 Java的“字面量”和“常量”吗? 2.2 常量和静态/运行时常量池有什么关系?什么是常量池? 2.3 字节码下的常量池以及常量池的加载机制 2.4 是不是所有的数字字面量都会被存到常量池中?3 - 包装类对象池 $\ne$JVM 常量池4 - 字符串池 4.1 字符串池的实现——StringTable 4.2 字符串池存的是实例还是引用?5 - 补充 5.1 永久代为何被 HotSpot VM 废弃? 5.2 为什么 Java 要分常量.简单类型