A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑飞 高级黑马   /  2014-10-23 18:21  /  1605 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

平时写些临时的代码都是放在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. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
for(Person p : list)这句正确吗?我记得for循环最重要的是两个分号。
回复 使用道具 举报
shileishihai 发表于 2014-10-23 19:56
for(Person p : list)这句正确吗?我记得for循环最重要的是两个分号。

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

这个是for each的方法
回复 使用道具 举报
好像不错的样子
回复 使用道具 举报
戏言丶 发表于 2014-10-23 21:27
你还没学到增强for循环吧?这是JDK1.5的新特性,不过它有一定的局限性,只能遍历,而且只能遍历集合和数 ...

受教了。和迭代器的区别是什么?
回复 使用道具 举报
千里马 发表于 2014-10-23 23:25
这个是for each的方法

受教了,请教有each for这种说法吗?
回复 使用道具 举报
shileishihai 发表于 2014-10-27 00:13
受教了。和迭代器的区别是什么?

增强for循环底层就是用Iterator实现的,但是Iterator可以在遍历的时候进行删除元素等操作,而增强for只能遍历,并不能有其他的操作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马