List集合的具体实现子类ArrayList
一、ArrayList集合的具体特点:
底层的数据结构是数组,查询快,增删慢,线程不安全,效率高。
/*
Collection[接口]:
List[接口]: 元素有序,可以发生重复,有索引的概念
ArrayList[具体的子类]: 底层数据结构是数组,查询快,增删慢,线程不安全,效率高。
Set[接口]: 元素无序且唯一,没有索引
*/
public class ArrayListDemo1 {
public static void main(String[] args) {
//创建集合对象
ArrayList list1 = new ArrayList();
//创建元素对象
//将元素添加到集合中
list1.add("hello");
list1.add("world");
list1.add("java");
list1.add("hadoop");
list1.add("hello");
list1.add("world");
//遍历集合
//1. 转数组遍历
Object[] objects = list1.toArray();
for(int i=0;i<objects.length;i++){
System.out.println(objects[i]);
}
System.out.println("========================");
//2. 使用迭代器的方式遍历
Iterator iterator = list1.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("========================");
//3. 使用size()和get(i) 只有List集合才拥有的遍历方式
for(int i=0;i<list1.size();i++){
System.out.println(list1.get(i));
}
}
}
二、练习题:使用ArrayList去除集合里面重复的元素
解题思路:可以创建一个新的集合,向里面添加数据的同时进行判断
public class ArrayListTest1 {
public static void main(String[] args) {
//创建集合对象,创建元素对象并将元素添加到集合中
ArrayList arrayList = new ArrayList();
arrayList.add("java");
arrayList.add("world");
arrayList.add("hive");
arrayList.add("hive");
arrayList.add("java");
arrayList.add("java");
//创建一个新的集合
ArrayList list = new ArrayList();
for(int i=0;i<arrayList.size();i++){
String s=(String) arrayList.get(i);//将旧集合里面的元素赋给s
if(!list.contains(s)){//如果新集合list中没有该元素就添加进去
list.add(s);
}
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
三、练习题:去除集合中自定义对象的重复值(对象的成员变量值都相同)
基本解题思路:先创建一个学生类,再通过上面的方法创建一个新的集合,并使用contains进行判断,但是要注意的是,在java中contains的源码是使用equals进行比较的我们元素Student类中并没有重写equals方法所以使用的是父类Object中的equals方法,而父类Object中的equals方法比较的是地址值又因为每一个学生都是new出来的,所以地址值都不一样,比较的结果永远为false要想比较内容值,需要元素类型重写equals方法,自动生成即可
学生类:
package com.day13;
import java.util.Objects;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
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 String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@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 && Objects.equals(name, student.name);
}
}
main方法:
public class ArrayListTest2 {
public static void main(String[] args) {
Student s1 = new Student("彭于晏",34);
Student s2 = new Student("李荣浩",23);
Student s3 = new Student("周杰伦",25);
Student s4 = new Student("王宝强",33);
Student s5 = new Student("李亦菲",24);
Student s6 = new Student("王宝强",33);
ArrayList list = new ArrayList();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
list.add(s6);
System.out.println(list);
ArrayList list1 = new ArrayList();
for(int i=0;i<list.size();i++){
Student a=(Student) list.get(i);
if(!list1.contains(a)){
list1.add(a);
}
}
System.out.println(list1);
}
}

浙公网安备 33010602011771号