List 三个子类的特点
- Arrlist:
底层数据结构是数组,查询块,增删慢。
线程不安全,效率高。 - Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。 - LinkedList:
底层数据结构是链表,查询慢,增删块。
线程不安全,效率高。
去除ArrayList中重复字符串元素方式
public class Demo4 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("张三");
list.add("李四");
list.add("李四");
list.add("王五");
list.add("王五");
System.out.println(list);
ArrayList list1 = onlyList(list);
System.out.println(list1);
}
public static ArrayList onlyList(ArrayList list){
ArrayList<String> list1 = new ArrayList<>();
Iterator it = list.iterator();
while (it.hasNext()){
String s = (String) it.next();
if (!list1.contains(s)){ //判断list1中是否包括该元素
list1.add(s);
}
}
return list1;
}
}
结果:
去除ArrayList中重复自定义对象元素(重写equals()方法)
与去除字符串元素基本相同,细节有些许不同。
- 重写Student类
//Student类中重写toString()和equals()方法,我用的是IDEA所以用快捷键生成
//不重写equals()默认比较的是地址值,当地址值不同时就会添加
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
name.equals(student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
//不重写toString,将打印地址值
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
- mian方法
public class Demo5 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("张三",15));
list.add(new Student("张三",15));
list.add(new Student("李四",15));
list.add(new Student("李四",15));
list.add(new Student("王五",15));
list.add(new Student("王五",15));
System.out.println(list);
ArrayList list1 = onlyList(list);
System.out.println(list1);
}
public static ArrayList onlyList(ArrayList list){
ArrayList<Student> list1 = new ArrayList<>();
Iterator<Student> it = list.iterator();
while (it.hasNext()){
Student s = it.next();
if (!list1.contains(s)){
list1.add(s);
}
}
return list1;
}
}
其实主要这样写代码,很冗长,不简便,如果学过lSet集合根据不重复的特性可以容易实现功能。