黑马程序员技术交流社区

标题: 不用equals去List集合重复元素 [打印本页]

作者: 郑飞    时间: 2014-10-23 18:21
标题: 不用equals去List集合重复元素
平时写些临时的代码都是放在Test.java里,不发上来估计过两天又被覆盖掉了;

  1. package com.itheima.io;

  2. import java.util.*;

  3. class Test
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 ArrayList<Person>  list = new ArrayList<Person>();
  8.                 list.add(new Person("person1",42));
  9.                 list.add(new Person("person4",23));
  10.                 list.add(new Person("person3",12));
  11.                 list.add(new Person("person4",23));
  12.                 list.add(new Person("person2",24));
  13.                 list.add(new Person("person3",12));
  14.                 list.add(new Person("person1",42));
  15.                 list.add(new Person("person2",24));
  16.                
  17.                 delete_iterator(list);
  18.                 print(list);
  19.                 delete_for(list);
  20.                 print(list);
  21.         }
  22.         public static void print(ArrayList<Person> list)
  23.         {
  24.                 for(Person p : list)
  25.                         System.out.println(p);
  26.         }
  27.         public static void delete_for(ArrayList<Person> list)
  28.         {
  29.                 Person pi,pj;
  30.                 for(int i = 0; i<list.size();i++)
  31.                 {
  32.                         pi = list.get(i);//取元素
  33.                         for(int j =0;j<list.size();j++)
  34.                         {
  35.                                 pj = list.get(j);//取元素
  36.                                 if(j!=i)
  37.                                 {
  38.                                         if(pi.name.equals(pj.name)&&pi.age==pj.age)//如果两个相等
  39.                                         {
  40.                                                 list.remove(pj);//移除pj
  41.                                                 j--;//list长度-1,所以下一个元素往前推1位;
  42.                                         }
  43.                                 }
  44.                         }
  45.                 }
  46.         }
  47.         public static void delete_iterator(ArrayList<Person> list)
  48.         {
  49.                 ListIterator<Person> it = list.listIterator();
  50.                 while(it.hasNext())
  51.                 {
  52.                         Person p = it.next();
  53.                         int i = 0;//移动的次数
  54.                         while(it.hasNext())
  55.                         {
  56.                                 Person p1 = it.next();
  57.                                 if(p.name.equals(p1.name)&&p.age==p1.age)
  58.                                 {
  59.                                         it.remove();
  60.                                         i--;//移除元素,相当于少移动一次;
  61.                                 }
  62.                                 i++;//向后移动了一次
  63.                         }
  64.                         for(;i>0;i--)//向前移动i次
  65.                                 it.previous();//向前移动i次,使得外层while回到原来位置;
  66.                 }
  67.         }
  68. }       
  69. class Person
  70. {
  71.         String name;
  72.         int age;
  73.         public String toString()
  74.         {
  75.                 return "name="+name+",age="+age+";";
  76.         }
  77.         Person(String name,int age)
  78.         {
  79.                 this.name=name;
  80.                 this.age=age;
  81.         }
  82. }
复制代码




作者: shileishihai    时间: 2014-10-23 19:56
for(Person p : list)这句正确吗?我记得for循环最重要的是两个分号。
作者: 戏言丶    时间: 2014-10-23 21:27
shileishihai 发表于 2014-10-23 19:56
for(Person p : list)这句正确吗?我记得for循环最重要的是两个分号。

你还没学到增强for循环吧?这是JDK1.5的新特性,不过它有一定的局限性,只能遍历,而且只能遍历集合和数组。不能对遍历的集合和数组进行增删改等操作。
作者: 千里马    时间: 2014-10-23 23:25
shileishihai 发表于 2014-10-23 19:56
for(Person p : list)这句正确吗?我记得for循环最重要的是两个分号。

这个是for each的方法
作者: 踏云    时间: 2014-10-24 00:12
好像不错的样子

作者: shileishihai    时间: 2014-10-27 00:13
戏言丶 发表于 2014-10-23 21:27
你还没学到增强for循环吧?这是JDK1.5的新特性,不过它有一定的局限性,只能遍历,而且只能遍历集合和数 ...

受教了。和迭代器的区别是什么?
作者: shileishihai    时间: 2014-10-27 00:22
千里马 发表于 2014-10-23 23:25
这个是for each的方法

受教了,请教有each for这种说法吗?
作者: 戏言丶    时间: 2014-10-27 07:41
shileishihai 发表于 2014-10-27 00:13
受教了。和迭代器的区别是什么?

增强for循环底层就是用Iterator实现的,但是Iterator可以在遍历的时候进行删除元素等操作,而增强for只能遍历,并不能有其他的操作




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2