Java集合类分析Collection(一)

Java集合类分析Collection(一)_第1张图片

所有的集合框架都包含如下内容:

  • 接口:是代表集合的抽象数据类型。
    1、Collection,但Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set);
    2、Collection的子接口有List、Set、Queue;
    3、Map:采用键-值对的存储方式,长度可动态改变。
    4、之所以定义多个接口,是为了以不同的方式操作集合对象
  • 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
  • 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

Java集合类分析Collection(一)_第2张图片
java.util包提供了集合类Collection,它是除Map外所有其他集合类的根接口。Collection的子接口有List、Set、Queue。
Collection的主要知识点如下:
添加:

boolean add(E e) 
    //确保此 collection 包含指定的元素(可选操作)。 
boolean addAll(Collection c) 
    //将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 

删除:

boolean remove(Object o) 
    //从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 
boolean removeAll(Collection c) 
    //移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 
boolean retainAll(Collection c) 
    //仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 
void clear() 
    //移除此 collection 中的所有元素(可选操作)。 

查找:

//如果是自建的元素类型,则要覆写equals()方法,才能使用constains()等方法进行查找
boolean contains(Object o) 
    //如果此 collection 包含指定的元素,则返回 true。 
boolean containsAll(Collection c) 
    //如果此 collection 包含指定 collection 中的所有元素,则返回 true。 
boolean equals(Collection c) 
    //比较此 collection 与指定对象是否相等。如果是对象集合,则还需要覆写equals方法! 
int hashCode() 
    //返回此 collection 的哈希码值。 
boolean isEmpty() 
    //如果此 collection 不包含元素,则返回 true。 
int size() 
    //返回此 collection 中的元素数。 

排序:

利用Collections(注意区别于Collection)的方法。

 Collections.sort(Collection);
 //注意Collection里的元素类一定要实现Comparable接口,基本数据类型以及String等都有。
 //如果没有实现Comparable接口,则在构造实现类的时候传入Comparator接口的实现类,比如:
 Queue<User> q = new PriorityQueue<>(new UserComparator());

转换为数组:
1、返回Object[]数组

Object[] toArray() 
    //返回包含此 collection 中所有元素的Object[]数组。
    
代码示例:
List<String> list = List.of("apple", "pear", "banana");
Object[] array = list.toArray();

2、返回指定类型数组

T[] toArray(T[] a) 
    //返回包含此 collection 中所有元素的数组;返回数组的类型与指定数组的类型同。
    
代码示例:    
List<Integer> list = List.of(12, 34, 56);
Integer[] array = list.toArray(new Integer[3]);
Number[] array = list.toArray(new Number[list.size()]);

覆写equals()方法
如果是自建的元素类型,则要覆写equals()方法,才能使用constains()方法,还比如List的indexOf()、Map的get()等方法,进行查找。
先确定实例“相等”的逻辑,即哪些字段相等,就认为实例相等;
用instanceof判断传入的待比较的Object是不是当前类型,如果是,继续比较,否则,返回false;
对引用类型用Objects.equals()比较,对基本类型直接用==比较。使用Objects.equals()比较两个引用类型是否相等的目的是省去了判断null的麻烦,两个引用类型都是null时它们也是相等的。当然此时的引用类型也需要有equals方法才行,比如Java标准库提供的String、Integer等已经覆写了equals()方法;如果在类中还有引用别的类则都需要覆写equals方法。
例如:

public class Person {
    public String name;
    public int age;
}
public boolean equals(Object o) {
    if (o instanceof Person) {
        Person p = (Person) o;
        return Objects.equals(this.name, p.name) && this.age == p.age;
    }
    return false;
}

你可能感兴趣的:(Java)