集合
java.util提供了集合类,包括
Collection:根接口
List:有序列表
Set:无重复元素集合
Map:通过Key查找Value的映射表
Java集合支持泛型,通过迭代器(Iterator)访问集合
Java集合设计的特点:
1)接口和实现相分离
2)支持泛型
3)访问集合有统一的方法(Iterator)
JDK的部分集合类时遗留类,不应该继续使用
1)Hashtable:一种线程安全的Map实现
2)Vector:一种线程安全的List实现
3)Stack:基于Vector实现的LIFO的栈
4)Enumeration\<E>:已被Iterator\<E>取代
List
使用List
List是一种有序列表,通过索引访问元素
1)void add(E e):在末尾添加一个元素
2)void add(int index, E e):在指定索引位置添加一个元素
3)int remove(int index):删除指定索引位置的元素
4)int remove(Object e):删除某个元素
5)E get(int index):获取指定索引的元素
6)int size():获取链表大小(包含元素的个数)
List有ArrayList和LinkedList两种实现
ArrayList | LinkedList | |
---|---|---|
获取指定元素 | 速度很快 | 需要从头开始查找元素 |
添加元素到末尾 | 速度很快 | 速度很快 |
在指定位置添加/删除 | 需要移动元素 | 不要移动元素 |
内存占用 | 少 | 较大 |
List中的元素可以重复,元素也可以是null
遍历List使用Iterator或者foreach循环
把List转换为Array的方法
1)Object[] toArray()
2) T[] toArray(T[] a)
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Integer[] array = list.toArray(new Integer[2]);
// {1, 2, 3}
Integer[] array = list.toArray(new Integer[5]);
// {1, 2, 3, null, null}
// 推荐===> Integer[] array = list.toArray(new Integer[list.size()]);
把Array转换为List的方法
1) List Arrays.asList(T… a)
Integer[] array = {
1, 2, 3};
List<Integer> list = Arrays.asList(array);
// 注意返回的list并不是ArrayList
// list.add(4); // UnsupportedOperatationException
List<Integer> arrayList = new ArrayList<>(); // ^_^
arrayList.addAll(list); // ^_^
编写equals方法
List是一种有序链表,List内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置
判断元素是否存在或者查找元素索引:
1)boolean contains(Object o):是否包含某个元素
2)int indexOf(Object o):查找某个元素的索引,不存在返回-1
要正确调用contains、indexOf方法,放入的实例要正确实现equals(),因为这两个方法底层是用equals比较实现的
equals()编写方法:
1)判断 this == o
2)判断 o instanceof Person
3)强制转型,并比较每个对应的字段
基本类型字段用 == 直接比较
引用类型字段借助Objects.equals()判断
public class Person {
private String name;
private int age;
public Person(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 "Person [name=" + name + ", age=" + age + "]";
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o instanceof Person) {
Person p = (Person) o;
// return (p.name==this.name || p.name!=null &&
// p.name.equals(this.name)) && p.age==this.age;
return Objects.equals(p.name, this.name) && p.age == this.age;
}
return false;
}
}
public class Main {
public static void main(String[] args)