`
747017186
  • 浏览: 335498 次
社区版块
存档分类
最新评论

如何比较消除list中的重复元素

    博客分类:
  • java
 
阅读更多

在开发中去重复是一项重要的功能,但是如何有效快速的取出重复呢?有几种情况:

第一种情况:list里面只有单个元素的去重。原来通过比较contains这个方法。这个方法实际上调用了系统底层的equals方法。

List list=new ArrayList();

list.add(1);

list.add(2);

list.add(3);

list.add(1);

 

List  list2=new ArrayList();

for (int i=0;i<list2.size();i++) {

      if(!list2.contains(list.get(i))){//判断list2中是否有list.get(i),如果有则不加入集合,没有则加入,这样达到去除重复的目的

list2.add(list.get(i));//元素加入到list2

}

}

 

第二种情况:list里面都是对象,对象之间属性值相同。去除重复。这种方法很麻烦,需要不断的循环进行比较。不推荐。。

/**

* 消除重复的元素

* @param nodeArr

* @return

*/

private List<AuthorNode> deleteSameElement(AuthorNode[] nodeArr){

List<AuthorNode> list1=Arrays.asList(nodeArr);//把数组转化为集合

List<AuthorNode> list2=new ArrayList<AuthorNode>();//把list1里面的内容加入到list2里面去

for (AuthorNode temp : list1) {

list2.add(temp);

}

try {

for (int i=0;i<nodeArr.length;i++) {

String s1=NumberHelper.stringToHex(nodeArr[i].getTextContent().trim());

int count=0;//记录元素重复的个数

for(int j=0;j<list1.size();j++){

String s2=NumberHelper.stringToHex(list1.get(j).getTextContent().trim());

if(s1.equals(s2)){//如果相同

count++;//数量自增

}

if(count>1){//如果大于1则 出现重复

list2.remove(list1.get(j));//移除重复元素

count--;//始终保持count为1

}

}

}

} catch (Exception e) {

// TODO: handle exception

System.out.println("消除重复元素出错!");

e.printStackTrace();

}

return list2;

}

这样返回的list2中,就是去除重复属性的元素了。

 

第三种方法:覆写对象的equals方法和hascode方法。这个方法很简单。以为无论list接口还是set接口在每次加入到集合的时候都要判断两者内容是否相等,怎么判断呢?就是通过equals方法。而如果想要equals方法返回true时,必须让haxcode编码也是一样。这个要切记

我在这里建立了student类:

public class Student {

private int id;

private String name;

public Student(int id,String name){

this.id=id;

this.name=name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public boolean equals(Object arg0) {

// TODO Auto-generated method stub

if(arg0 instanceof Student){//判断比较的对象是否是studetn类

Student s=(Student) arg0;

if(s.getId()==this.id&&s.getName().equals(this.name)){//判断如果属性值都相同

return true;

}else{

return false;

}

}else{

return false;

}

//return super.equals(arg0);

}

 

@Override

public int hashCode() {

// TODO Auto-generated method stu

return (this.name.hashCode())+(String.valueOf(this.id).hashCode());//如果内容相同则,让返回的hascode编码唯一

//return super.hashCode();

}

 

主方法:

Student student1=new Student(1,"a");

Student student2=new Student(2,"b");

Student student3=new Student(3,"c");

Student student4=new Student(3,"c");

Set<Student> set=new HashSet<Student>();//hashset测试size大小为3

set.add(student1);

set.add(student2);

set.add(student3);

set.add(student4);

System.out.println(set.size());

 

 

List<Student> list=new ArrayList<Student>();//list的测试size大小也为3

if(!list.contains(student1)){

list.add(student1);

}

if(!list.contains(student2)){

list.add(student2);

}

if(!list.contains(student3)){

list.add(student3);

}

if(!list.contains(student4)){

list.add(student4);

}

System.out.println(list.size());

 

如果不进行覆写equals和hascode方法,则会调用object类。只是地址进行比较不能进行内容比较。所以一般jdk的string类默认进行了equals和hascode方法的覆写。我们在使用的时候直接使用即可了。

所以一定要记住如果自定义类要比较对象一定要覆写equals方法和hascode方法。并且equals返回true的时候,两对象的hascode编码要一样。

分享到:
评论

相关推荐

    List列表拒绝添加重复信息

    然而,在某些情况下,我们可能希望创建一个不允许添加重复元素的List。在这种场景下,Python提供了多种策略来实现这个功能。 首先,我们可以使用Python的内置数据结构`set`。Set类似于List,但不包含重复元素,并且...

    java去除集合中重复元素示例分享 java去除重复

    在实际开发中,我们经常需要从集合中去除重复元素,以保证数据的唯一性和正确性。今天,我们来分享一个Java集合去重示例,帮助大家更好地理解和应用这个概念。 Java集合去重示例的需求背景 -----------------------...

    Python实现嵌套列表及字典并按某一元素去重复功能示例

    6. **循环控制**:通过`break`和`continue`控制循环流程,避免重复元素的添加。 这些基本操作对于任何Python开发者来说都是必须掌握的,尤其是在处理大量数据和构建数据处理工具时。熟悉这些技巧可以帮助你更有效地...

    java中删除数组中重复元素方法探讨

    `Set`不允许重复元素,所以它可以用来消除数组或列表中的重复。在给定的`removeDuplicate`方法中,我们首先将`List`转换为`HashSet`,这会自动去除重复元素。然后清空原始`List`,并将其填充回`HashSet`的内容。这种...

    易语言源码去掉重复文本比较.rar

    4. **集合与列表**:易语言中的集合(Set)和列表(List)可以用来存储不重复的元素。通过将文本元素添加到集合,可以自动去除重复项,因为集合中的元素不允许重复。 5. **条件判断**:在比较文本时,会用到条件...

    Java集合Collection、List、Set、Map使用详解

    - **消除重复元素**:某些类型的容器(如`Set`)能够确保其中的元素不重复。 - **键值对映射**:`Map`容器允许将对象以键值对的形式进行存储,这对于基于键进行快速查找非常有用。 ##### 容器的分类 容器大致可以...

    python消除序列的重复值并保持顺序不变的实例

    上述代码中,我们定义了一个`rem`函数,它通过键函数从每个元素中提取一个哈希值。如果这个哈希值尚未出现在`seen`集合中,就将元素返回,并将哈希值加入到`seen`集合中。 总结来说,Python提供了多种灵活的方式来...

    Lista-Repeticao:附表二,重复表,古斯塔沃教授

    在IT领域,特别是编程和数据处理中,"列表重复"是一个常见的概念,它涉及到如何管理和操作包含重复元素的集合。"附表二,重复表,古斯塔沃教授"可能指的是一个教学材料或案例研究,由古斯塔沃教授设计,用于阐述如何...

    实验六,集合与范型.zip

    1. List接口:List是一种有序的集合,允许包含重复元素。它定义了add、get、remove等方法,以及按索引访问元素的能力。ArrayList和LinkedList是两种常见的List实现。ArrayList在内存中以数组形式存储数据,适合随机...

    pytion集合的用法

    它提供了多种操作,包括关系测试、消除重复元素、union(联合)、intersection(交)、difference(差)和symmetric difference(对称差集)等数学运算。 在Pyton中,集合类型可以用来去重处理和数据的中转处理。...

    Java 集合类面试题.docx

    同时,消除集合中的重复元素,HashSet 或者使用流(Java 8 及以上版本)可以提供更高效的方法。 总之,了解和掌握这些 Java 集合类的区别和特性,对于编写高效、线程安全的代码具有重要意义,也是面试中常考的技能...

    Java排列组合_组合算法

    排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,而组合则是指从n个不同元素中不考虑顺序取出m个元素。排列与组合的区别在于是否考虑选取元素的顺序。 在Java中实现组合算法,通常会用到递归...

    集合框架和泛型机制的解释

    例如,List接口代表了一个有序的元素列表,允许重复元素,并提供了按索引访问元素的能力;Set接口则不允许重复元素,它强调的是元素的唯一性;Queue接口则用于实现队列操作,遵循先进先出(FIFO)的原则。 在集合...

    web网络传输协议,网络相关

    本篇文章介绍了 Cookie、SessionStorage 和 LocalStorage 的区别、JavaScript 闭包和 setTimeout 函数的使用、消除数组中的重复元素三种方法、访问 DOM 元素和子元素的递归函数、Ajax 异步请求技术等知识点。

    java集合框架,泛化.doc

    - **List**:从Collection接口派生,增加了保持元素顺序的能力,允许有重复元素。常见的实现有: - **ArrayList**:基于数组实现,支持快速的随机访问,适合频繁的查找和修改操作。 - **LinkedList**:基于双向...

    使用集合组织相关数据

    1. **去重**:快速消除列表中的重复元素,如`unique_list = list(set(list_with_duplicates))`。 2. **判断元素存在性**:检查某个元素是否存在于一组数据中,提高查询效率。 3. **集合分析**:在数据分析中,通过...

    【IT十八掌徐培成】Java基础第24天-05.内连接-外链接-集合-去重查询.zip

    例如,`list.stream().distinct().collect(Collectors.toList())`将返回一个没有重复元素的新列表。此外,当我们需要基于特定字段去重时,可以自定义比较器(Comparator)来实现更复杂的去重逻辑。 总结,Java中的...

    ocjp题库 1z0-851

    注意,TreeSet不允许插入重复的元素,重复元素的加入会失败。 总结:1Z0-851是针对Oracle认证的Java SE 6程序员的考试。这个考试的内容不仅包括Java语言的基础知识,还包括泛型的使用、集合框架的高级特性、集合...

    List-the-main-element-method.rar_The Element

    列主元素法是高斯消元法的一种变体,其核心思想是选择每一列中绝对值最大的元素作为主元素,然后通过行交换和行倍乘操作使主元素所在行的其余元素为零,以此类推,直到整个系数矩阵变为上三角矩阵。之后,通过回代...

    [Java泛型和集合].

    主要有List(有序且可包含重复元素)、Set(无序且不允许重复元素)、Queue(先进先出的数据结构)和Map(键值对存储)。泛型与集合框架的结合使得我们可以为集合指定具体的元素类型,如`ArrayList&lt;String&gt;`,这确保...

Global site tag (gtag.js) - Google Analytics