• Java去除ArrayList集合中重复字符串的案例


    ArrayList去除集合中的字符串重复值
    分析:
    A:创建集合对象
    B:添加多个字符串元素
    C:创建新集合
    D:遍历旧集合,获取得到每一个元素
    E:拿着个元素到新集合去找,看有没有
    有:不进去
    没有:添加到新集合
    F:遍历新集合

    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 Array = new ArrayList();

    // 遍历旧集合,获取得到每一个元素
    Iterator it = array.iterator();
    while (it.hasNext()) {
    String s = (String) it.next();

    // 拿这个元素到新集合去找,看有没有
    if (!Array.contains(s)) { // contains表示 在newArray中是否包含s
    Array.add(s);
    }
    }

    // 遍历新集合
    for (int x = 0; x < Array.size(); x++) {
    String s = (String) Array.get(x);
    System.out.println(s);
    }
    }

    案例2(不能创建新的集合):

    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--;
    }
    }
    }

    //遍历集合
    Iterator it = array.iterator();
    while(it.hasNext()){
    String s = (String)it.next();
    System.out.println(s);
    }
    }

    -----------------------------------------------------------------------------------------
    需求:去除集合中自定义对象的重复值(对象的成员变量都相同)

    public static void main(String[] args){
    //创建集合对象
    ArrayList array = new ArrauList();

    //创建学生对象
    Strdent s1 = new Student("林青霞1",27);
    Strdent s2 = new Student("林青霞2",27);
    Strdent s3 = new Student("林青霞3",27);
    Strdent s4 = new Student("林青霞4",27);
    Strdent s5 = new Student("林青霞1",27);
    Strdent s6 = new Student("林青霞1",28);

    //添加元素
    array.add(s1);
    array.add(s2);
    array.add(s3);
    array.add(s4);
    array.add(s5);
    array.add(s6);

    //创建新集合
    ArrayList newArray = new ArrayList();

    //遍历旧集合,获取得到每一个元素
    Iterator it = array.iterator();
    while(it.hasNext()){
    Student s = (Student)it.next();

    //拿这个元素到新集合去找,看有没有
    if(!newArray.contains(s)){
    newArray.add(s);
    }
    }

    //遍历新集合
    for(int x=0;x<newArray.size();x++){
    Studetn s = (Studetn)newArray.get(x);
    System.out.println(s.getName()+"---"+s.getAge());
    }
    }
    -------------------------------------------------------------
    //最后输出:林青霞1---27
    林青霞2---27
    林青霞3---27
    林青霞4---27
    林青霞1---27
    林青霞1---28
    //我们发现按照和字符串一样的操作,出问题了。
    为什么呢?
    我们必须考虑哪里会出问题
    分析后,问题出现判断上也就是32行if(!newArray.contains(s)){
    而这个判断功能是集合自己提供的,所以我们如果想很清楚的
    知道它是如何判断的,就应该去看源码:
    //源码
    public boolean contains(Object o) {
    return indexOf(o) >= 0;
    }

    public int indexOf(Object o) {
    if (o == null) {
    for (int i = 0; i < size; i++)
    if (elementData[i]==null)
    return i;
    } else {
    for (int i = 0; i < size; i++)
    if (o.equals(elementData[i]))
    return i;
    }
    return -1;
    }

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

    //工具类代码:
    package javatest;

    public class Student {
    // 成员变量
    private String name;
    private int age;

    // 构造方法
    public Student() {
    super();

    }

    public Student(String name, int age) {
    super();
    this.name = name;
    this.age = age;
    }

    // get方法set方法
    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public int getAge() {
    return age;
    }

    public void setAge(int age) {
    this.age = age;
    }

    @Override
    public String toString() {
    return "Student: [name=" + name + ",age=" + age + "]";
    }

    /*
    * (non-Javadoc)
    *
    * @see java.lang.Object#hashCode()
    */

    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    final Student other = (Student) obj;
    if (age != other.age)
    return false;
    if (name == null) {
    if (other.name != null)
    return false;
    } else if (!name.equals(other.name))
    return false;
    return true;
    }
    }

  • 相关阅读:
    LeetCode_326. Power of Three
    LeetCode_303. Range Sum Query
    LeetCode_299. Bulls and Cows
    LeetCode_292. Nim Game
    LeetCode_290. Word Pattern
    LeetCode_283. Move Zeroes
    LeetCode_278. First Bad Version
    LeetCode_268. Missing Number
    LeetCode_263. Ugly Number
    LeetCode_258. Add Digits
  • 原文地址:https://www.cnblogs.com/lszbk/p/12318511.html
Copyright © 2020-2023  润新知