美文网首页
ArrayList的小练习

ArrayList的小练习

作者: 帅气的猪猪 | 来源:发表于2016-09-11 17:08 被阅读99次
  • 需求:将集合中相同的东西去除掉

  • ArrayList去除集合中字符串的重复值(字符串的内容相同)

  • 分析:
    A:创建集合对象
    B:添加多个字符串元素(包含内容相同的)
    C:创建新集合
    D:遍历旧集合,获取得到每一个元素
    E:拿这个元素到新集合去找,看有没有
    有:不搭理它
    没有:就添加到新集合
    F:遍历新集合

     public class ArrayListDemo {
         public static void main(String[] args) {
     // 创建集合对象
     ArrayList array = new ArrayList();
    
     // 添加多个字符串元素(包含内容相同的)
     array.add("hello");
     array.add("world");
     array.add("java");
     array.add("world");
     array.add("java");
     array.add("world");
     array.add("world");
     array.add("world");
     array.add("world");
     array.add("java");
     array.add("world");
    
     // 创建新集合
     ArrayList newArray = new ArrayList();
    
     // 遍历旧集合,获取得到每一个元素
     Iterator it = array.iterator();
     while (it.hasNext()) {
         String s = (String) it.next();
    
         // 拿这个元素到新集合去找,看有没有
         if (!newArray.contains(s)) {
             newArray.add(s);
         }
     }
    
     // 遍历新集合
     for (int x = 0; x < newArray.size(); x++) {
         String s = (String) newArray.get(x);
         System.out.println(s);
     }
      }
     }
    

这是第二种方法:

  public class ArrayDemo{
      public static void mian(String[] args){
           ArrayList list = new ArrayList();
           list.add("Hello");
           list.add("Word");
           list.add("Java");
           list.add("Android");
           list.add("Word");
           list.add("Word");
           list.add("Word");
           list.add("Java");
           list.add("Android");
           
           ArrayList newArray= new ArrayList();
           for(int x = 0; x < list.size(); x ++){
                 if(!newArray.contains(list.get(x))){
                          newArray.add(list.get(x));
                  }
            }
       }
 }            
  • 小练习二:

  • 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)

  • 要求:不能创建新的集合,就在以前的集合上做。

    public class ArrayListDemo2 {
       public static void main(String[] args) {
     // 创建集合对象
     ArrayList array = new ArrayList();
    
     // 添加多个字符串元素(包含内容相同的)
     array.add("hello");
     array.add("world");
     array.add("java");
     array.add("world");
     array.add("java");
     array.add("world");
     array.add("world");
     array.add("world");
     array.add("world");
     array.add("java");
     array.add("world");
    
     // 由选择排序思想引入,我们就可以通过这种思想做这个题目
     // 拿0索引的依次和后面的比较,有就把后的干掉
     // 同理,拿1索引...
     for (int x = 0; x < array.size() - 1; x++) {
         for (int y = x + 1; y < array.size(); y++) {
             if (array.get(x).equals(array.get(y))) {
                 array.remove(y);
                 y--;    重点:这里必须y--,因为remove一个数据之后
                           它的下一个数据就会往上移动,如果这时候上移动的数据是重复的,
                           array并不能移除掉相应的数据,因为此时的Y已经++了,
                            所以该数据可能会被跳过去
             }
         }
     }
    
     // 遍历集合
     Iterator it = array.iterator();
     while (it.hasNext()) {
         String s = (String) it.next();
         System.out.println(s);
     }
    }
    }
    
  • 练习三:去除相同的对象
    需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)
    我们按照和字符串一样的操作,发现出问题了。
    为什么呢?
    1 我们必须思考哪里会出问题?
    2 通过简单的分析,我们知道问题出现在了判断上。
    3 而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。

  • contains()方法的底层依赖的是equals()方法。
    而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法
    Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。
    按照我们自己的需求,比较成员变量的值,重写equals()即可。
    自动生成即可。

    public class ArrayListDemo3 {
       public static void main(String[] args) {
     // 创建集合对象
     ArrayList array = new ArrayList();
    
     // 创建学生对象
     Student s1 = new Student("林青霞", 27);
     Student s2 = new Student("林志玲", 40);
     Student s3 = new Student("凤姐", 35);
     Student s4 = new Student("芙蓉姐姐", 18);
     Student s5 = new Student("翠花", 16);
     Student s6 = new Student("林青霞", 27);
     Student s7 = new Student("林青霞", 18);
    
     // 添加元素
     array.add(s1);
     array.add(s2);
     array.add(s3);
     array.add(s4);
     array.add(s5);
     array.add(s6);
     array.add(s7);
    
     // 创建新集合
     ArrayList newArray = new ArrayList();
    
     // 遍历旧集合,获取得到每一个元素
     Iterator it = array.iterator();
     while (it.hasNext()) {
         Student s = (Student) it.next();
    
         // 拿这个元素到新集合去找,看有没有
         if (!newArray.contains(s)) { 注意:这里需要在实体类中重写equals方法
             newArray.add(s);
         }
     }
    
     // 遍历新集合
     for (int x = 0; x < newArray.size(); x++) {
         Student s = (Student) newArray.get(x);
         System.out.println(s.getName() + "---" + s.getAge());
     }
    

相关文章

网友评论

      本文标题:ArrayList的小练习

      本文链接:https://www.haomeiwen.com/subject/fovuettx.html