美文网首页
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