常用Collection和Map的继承机构图
1、常用Collection继承结构图及说明:

1.1 哈希表/散列表数据结构

一、关于Collection常用方法:
(
新建Collection:
Collection co1 = new ArrayList();// 多态
Collection co2 = new LinkedList();// 多态
Collection co3 = new Vector();// 多态
)
1. boolean add(E e) : 向集合中添加元素
2. boolean addAll(Collection<? extends E> c) : 将指定集合中的所有元素添加到这个集合(可选操作)。
3. void clear() : 从这个集合中移除所有的元素(可选操作)。
4. boolean contains(Object o) : 返回 true如果集合包含指定元素。底层调用的equals()方法。因此存储在集合中的对象,都要重写equals()方法,否则为内存地址的比较。
5. boolean containsAll(Collection<?> c) : 返回 true如果这个集合包含指定集合的所有元素。
6. boolean equals(Object o) : 将指定的对象与此集合进行比较,以进行相等性。
7. int hashCode() : 返回此集合的哈希代码值。
8. boolean isEmpty() : 返回 true如果集合不包含任何元素。
9. Iterator<E> iterator() : 迭代器。迭代器的remove()方法在删除时不会动内存中的集合,集合自带的remove()会实时删除内存中的集合,需要实时更新迭代器才可以。推荐使用迭代器删除
10. default Stream<E> parallelStream() : 返回一个可能并行 Stream与集合的来源。
11. boolean remove(Object o) : 从这个集合中移除指定元素的一个实例,如果它是存在的(可选操作)。存储在集合中的对象,都要重写equals()方法,否则为内存地址的比较。
12. boolean removeAll(Collection<?> c) : 删除此集合中包含的所有元素(可选操作)的所有元素(可选操作)。
13. default boolean removeIf(Predicate<? super E> filter) : 删除满足给定谓词的这个集合的所有元素。
14. boolean retainAll(Collection<?> c) : 仅保留包含在指定集合中的这个集合中的元素(可选操作)。
15. int size() : 返回此集合中的元素的数目。
二、List常用方法:
(
List除了继承了Collection中的方法外,还有一些自己的方法,如get(index)、add(index,Object)。List初始化时预估大小,防止频繁扩容降低效率。
新建List:
List co1 = new ArrayList(50);// 默认ArrayList初始化为10,每次扩容添加1.5倍
List co2 = new LinkedList();// 多态
List co3 = new Vector();// 默认LinkedList初始化为10,每次扩容添加2倍
)
1.add(int index, E element) 在列表中指定的位置上插入指定的元素
2.get(int index) 返回此列表中指定位置的元素。
三、Set常用方法
(
Set除了继承了Collection中的方法外,还有一些自己的方法,如 。
新建Set,默认初始化容量16,加载因子为0.75:
Set st1 = new HashSet();// HashSet底层实际上是使用了HashMap中key的原理,无序不重复。哈希表/散列表,是数组和LinkedList优点的集合,其本质是个数组,但其中每个元素是一个个链表,类似于字典查询,判断增删查效率都很高。
// 因为在添加元素时会调用HashCode方法生成数组下标,然后调用equals方法判断是否重复,所以在往HashSet中添加实体类的时候,需要重写HashCode和equals方法,否则对比的是两个内存地址。
SortedSet st2 = new TreeSet()// 无序不可重复,但是存进去的元素可以按照大小自动排序(数值、时间、字符串均可以,因为存储的元素实现了comparable接口)
)
1.hashCode() 返回此组的哈希代码值。
应用实例:
public static void main(String[] args) {
Collection co = new ArrayList();// 多态
// List有自己的私有方法,如get(index)、add(index,Object),如果有需要使用到这些方法,应该直接创建List对象。使用时注意初始化大小,避免频繁扩容
// List ls = new ArrayList();
// List ls = new LinkedList();//list的多态
co.add(1);
co.add(new Integer(100));
Object o = new Object();
co.add(o);
Customer cus = new Customer("Make", 34);
co.add(cus);// 存储单值,会自动调用toString方法
System.out.println(co.size());
System.out.println(co.isEmpty());
Object[] objs = co.toArray();
for (Object obj : objs) {
System.out.println("obj>>" + obj);
}
// 迭代、遍历,获取迭代器对象。不需要关心底层集合的具体类型,所有集合依赖的迭代器都实现了java.util.Iterator接口
Iterator it = co.iterator();// 迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的“迭代器对象”
// while写法
while (it.hasNext()) {
// it.next()将迭代器向下移动一位,并去除指向的元素,初始时it不指向元素,调用next()时指向第一个元素,调用next()之前,必须调用hasNext()
System.out.print("itItem>>" + it.next() + "; ");
}
System.out.println();
// for写法
for (Iterator it2 = co.iterator(); it2.hasNext();) {
Object element = it2.next();
System.out.print("element>>>" + element + "; ");
}
System.out.println();
co.clear();
System.out.println(co.size());
System.out.println(co.isEmpty());
}
static class Customer {
String name;
int age;
Customer(String name, int age) {
this.age = age;
this.name = name;
}
// 重写toString()
public String toString() {
return "Customer[name = " + name + ", age = " + age + "]";
}
// equals(E)方法。
// contains(o)比较:自己创建的对象,对比两个内容相同对象,
// 对象没重写equals(o)方法则对比的是对象的内存地址,结果不会返回true。
// 而集合对象内部的比较已经重新了equals方法
public boolean equals(Object o) {
if (this == o) return true;
if (o instanceof Customer) {
Customer c = (Customer)o;
if (c.age == this.age && c.name.equals(this.name)) {
return true;
}
}
return false;
}
}
2、常用Map继承结构图及说明:


浙公网安备 33010602011771号