JAVA类集(数据结构+多线程)在java.util.*;
--动态数组(当元素个数达到最大值时,动态增加容量)
- JAVA类集产生-JDK1.2
动态数组:解决数组定长问题
1.2 Collection接口:单个对象保存的最顶层父接口
单个对象保存:Collection接口以及其子接口,在每次数据操作时只能够对单个对象进行处理.
(泛型就是为了类集而服务的)泛型:避免了向下转型
public interface Collection<E> extends Iterable<E>
1.3 Iterable<E>:迭代器接口(就是为了遍历集合)
Iterator<T> iterator();(取得集合的迭代器,JDK1.5之前直接写在Collection接口中)
1.4Collection接口中提供的核心方法:
Add(T t):向类集中添加元素
iterator():取得类集的迭代器
Collection接口只定义了存储数据的标准,但是无法区分存储类型。因此在实际中我们往往使用两个子接口List(允许数据重复),set(不允许数据重复),一般不直接使用Collection接口。
- List接口(80%)---允许数据重复
在进行单个集合处理时,优先考虑List接口
在List接口中,拓展了两个重要方法(list接口独有)
Public E get(int index):根据索引下标取得数据
Public E set(int index,E element);根据索引下标更新数据,返回修改前的数据
List(java.awt):是界面的东西,下拉链表
List接口有三个重要子类:ArrayList,Vector,LinkedList,这三个子类在使用时没有任何区别
代码如下:
import javax.sound.midi.Soundbank;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class wl {
public static void main(String[] args) throws Exception {
List<Integer> list=new ArrayList<> ();
list.add (1);
list.add (2);
list.add (3);
list.add (4);
System.out.println (list);
System.out.println (list.contains (4));
System.out.println (list.size ());
System.out.println (list.remove (3));//下标为数组的下标
System.out.println (list.get (0));
System.out.println (list.set (0,9));//返回修改前的值
System.out.println (list);
}
}
结果:
[1, 2, 3, 4]
true
4
4
1
1
[9, 2, 3]
List接口要想保存自定义的类的对象,该类必须覆写equals()来使用contains(),remove()等方法
import javax.sound.midi.Soundbank;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Person{
private String name;
private Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object obj) {
//1.传进来是的是一个对象
if(obj==this){
return true;
}else if(obj==null){
return false;
}else if(!(obj instanceof Person)){//传进来的是否是Person类的子类
return false;
}
//向下转型还原为Person对象
Person per=(Person)obj;
return this.age.equals (per.age)&&this.name.equals (per.name);
}
}
public class wl {
public static void main(String[] args) throws Exception {
//想要保存自定义的Person对象
List<Person> list=new ArrayList<> ();
list.add (new Person ("王",18));
list.add (new Person ("李",19));
list.add (new Person ("张",20));
System.out.println (list);
System.out.println (list.contains (new Person ("王",18)));
System.out.println (list.remove (new Person("张",20)));
System.out.println (list.size ());
}
}
结果:
[Person{name='王', age=18}, Person{name='李', age=19}, Person{name='张', age=20}]
true
true
2