在开发中去重复是一项重要的功能,但是如何有效快速的取出重复呢?有几种情况:
第一种情况: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。在这种场景下,Python提供了多种策略来实现这个功能。 首先,我们可以使用Python的内置数据结构`set`。Set类似于List,但不包含重复元素,并且...
在实际开发中,我们经常需要从集合中去除重复元素,以保证数据的唯一性和正确性。今天,我们来分享一个Java集合去重示例,帮助大家更好地理解和应用这个概念。 Java集合去重示例的需求背景 -----------------------...
6. **循环控制**:通过`break`和`continue`控制循环流程,避免重复元素的添加。 这些基本操作对于任何Python开发者来说都是必须掌握的,尤其是在处理大量数据和构建数据处理工具时。熟悉这些技巧可以帮助你更有效地...
`Set`不允许重复元素,所以它可以用来消除数组或列表中的重复。在给定的`removeDuplicate`方法中,我们首先将`List`转换为`HashSet`,这会自动去除重复元素。然后清空原始`List`,并将其填充回`HashSet`的内容。这种...
4. **集合与列表**:易语言中的集合(Set)和列表(List)可以用来存储不重复的元素。通过将文本元素添加到集合,可以自动去除重复项,因为集合中的元素不允许重复。 5. **条件判断**:在比较文本时,会用到条件...
- **消除重复元素**:某些类型的容器(如`Set`)能够确保其中的元素不重复。 - **键值对映射**:`Map`容器允许将对象以键值对的形式进行存储,这对于基于键进行快速查找非常有用。 ##### 容器的分类 容器大致可以...
上述代码中,我们定义了一个`rem`函数,它通过键函数从每个元素中提取一个哈希值。如果这个哈希值尚未出现在`seen`集合中,就将元素返回,并将哈希值加入到`seen`集合中。 总结来说,Python提供了多种灵活的方式来...
在IT领域,特别是编程和数据处理中,"列表重复"是一个常见的概念,它涉及到如何管理和操作包含重复元素的集合。"附表二,重复表,古斯塔沃教授"可能指的是一个教学材料或案例研究,由古斯塔沃教授设计,用于阐述如何...
1. List接口:List是一种有序的集合,允许包含重复元素。它定义了add、get、remove等方法,以及按索引访问元素的能力。ArrayList和LinkedList是两种常见的List实现。ArrayList在内存中以数组形式存储数据,适合随机...
它提供了多种操作,包括关系测试、消除重复元素、union(联合)、intersection(交)、difference(差)和symmetric difference(对称差集)等数学运算。 在Pyton中,集合类型可以用来去重处理和数据的中转处理。...
同时,消除集合中的重复元素,HashSet 或者使用流(Java 8 及以上版本)可以提供更高效的方法。 总之,了解和掌握这些 Java 集合类的区别和特性,对于编写高效、线程安全的代码具有重要意义,也是面试中常考的技能...
排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,而组合则是指从n个不同元素中不考虑顺序取出m个元素。排列与组合的区别在于是否考虑选取元素的顺序。 在Java中实现组合算法,通常会用到递归...
例如,List接口代表了一个有序的元素列表,允许重复元素,并提供了按索引访问元素的能力;Set接口则不允许重复元素,它强调的是元素的唯一性;Queue接口则用于实现队列操作,遵循先进先出(FIFO)的原则。 在集合...
本篇文章介绍了 Cookie、SessionStorage 和 LocalStorage 的区别、JavaScript 闭包和 setTimeout 函数的使用、消除数组中的重复元素三种方法、访问 DOM 元素和子元素的递归函数、Ajax 异步请求技术等知识点。
- **List**:从Collection接口派生,增加了保持元素顺序的能力,允许有重复元素。常见的实现有: - **ArrayList**:基于数组实现,支持快速的随机访问,适合频繁的查找和修改操作。 - **LinkedList**:基于双向...
1. **去重**:快速消除列表中的重复元素,如`unique_list = list(set(list_with_duplicates))`。 2. **判断元素存在性**:检查某个元素是否存在于一组数据中,提高查询效率。 3. **集合分析**:在数据分析中,通过...
例如,`list.stream().distinct().collect(Collectors.toList())`将返回一个没有重复元素的新列表。此外,当我们需要基于特定字段去重时,可以自定义比较器(Comparator)来实现更复杂的去重逻辑。 总结,Java中的...
注意,TreeSet不允许插入重复的元素,重复元素的加入会失败。 总结:1Z0-851是针对Oracle认证的Java SE 6程序员的考试。这个考试的内容不仅包括Java语言的基础知识,还包括泛型的使用、集合框架的高级特性、集合...
列主元素法是高斯消元法的一种变体,其核心思想是选择每一列中绝对值最大的元素作为主元素,然后通过行交换和行倍乘操作使主元素所在行的其余元素为零,以此类推,直到整个系数矩阵变为上三角矩阵。之后,通过回代...
主要有List(有序且可包含重复元素)、Set(无序且不允许重复元素)、Queue(先进先出的数据结构)和Map(键值对存储)。泛型与集合框架的结合使得我们可以为集合指定具体的元素类型,如`ArrayList<String>`,这确保...