java--ArrayList去除集合中字串的重複值
阿新 • • 發佈:2019-02-02
幾種方法,我們直接通過程式碼去看:
import java.util.ArrayList; import java.util.Iterator; /* * 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); } }
import java.util.ArrayList; import java.util.Iterator; /* * 需求: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--; } } } // 遍歷集合 Iterator it = array.iterator(); while (it.hasNext()) { String s = (String) it.next(); System.out.println(s); } }
import java.util.ArrayList; import java.util.Iterator; /* * 需求:去除集合中自定義物件的重複值(物件的成員變數值都相同) * * 我們按照和字串一樣的操作,發現出問題了。 * 為什麼呢? * 我們必須思考哪裡會出問題? * 通過簡單的分析,我們知道問題出現在了判斷上。 * 而這個判斷功能是集合自己提供的,所以我們如果想很清楚的知道它是如何判斷的,就應該去看原始碼。 * 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)) { newArray.add(s); } } // 遍歷新集合 for (int x = 0; x < newArray.size(); x++) { Student s = (Student) newArray.get(x); System.out.println(s.getName() + "---" + s.getAge()); } } }
Student的類程式碼為:
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;
}
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 boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
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;
}
}