常用的集合类

集合类的由来

对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。就使用集合容器进行存储。

集合特点

  • 用于存储对象的容器。
  • 集合的长度是可变的。
  • 集合中不可以存储基本数据类型值。

集合容器因为内部的数据结构不同,有多种具体容器。不断的向上抽取,就形成了集合框架。

框架的顶层Collection接口:

image.png

这里Collection是高层次的抽象,而List与Set都extends这个Collection,这三个都是接口

Collection的方法(增删判拿)

Collection方法是所以集合都有的方法,必须知道

  • 添加
    boolean add(Object obj);
    boolean addAll(Collection coll);

  • 删除
    boolean remove(Object obj)
    boolean removeAll(Collection coll)
    void clear();

  • 判断
    boolean contains(object obj):
    boolean containsAll(Colllection coll);
    boolean isEmpty():判断集合中是否有元素。

  • 获取

int size():
Iterator iterator() 取出元素的方式 Iterator是迭代器对象
Iterator中方法
hasnext() 看看有没有下一个元素,返回值是boolean类型
next()取出下一个对象,返回值是对象,用下面的方法就可以遍历集合

List  l = new ArrayList();   造一个集合
Iterator iterator = l.iterator();  根据这个集合造一个迭代器
while(iterator.hasnext()){
Sop(l.next());
}

List与Set

List与Set区别

  • List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
  • Set:元素不能重复,无序。
    根据是否能存入重复元素来选用List还是Set

List的方法

List方法是可以进行增删改查操作的,且都可以操作索引

  • 添加
    void add(index,element);
    void add(index,collection);

  • 删除

    Object remove(index):

  • 修改
    Object set(index,element);

  • 获取
    Object get(index);
    int indexOf(object);
    int lastIndexOf(object);
    List subList(from,to);

List下面的类

  • Vector:内部是数组数据结构,是同步的。增删,查询都很慢!
  • ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
  • LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。

Set接口

  • HashSet: 内部数据结构是哈希表 ,是不同步的。

如何保证该集合的元素唯一性呢?

是通过对象的hashCode和equals方法来完成对象唯一性的。
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储

记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法
**因为我们建立不同的对象,书,人,桌子等,都有自己的一套判断是否相等的依据,重写自己的哈希代码和equals

  • TreeSet:可以对Set集合中的元素进行排序。

判断元素唯一性的方式:
就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。 不看hashcode和equals方法

排序方式一:
Treeset是一个排序集合,设计排序就必须比较,所以里面装的对象必须实现Comparble接口,覆盖compareTo方法。

如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。怎么办?
可以使用TreeSet集合第二种排序方式二:

让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。
将该类对象作为参数传递给TreeSet集合的构造函数。

哈希表确定元素是否相同

1,判断的是两个元素的哈希值是否相同。

如果相同,在判断两个对象的内容是否相同。

2,判断哈希值相同,其实判断的是对象的hashCode的方法。判断内容相同,用的是equals方法。

注意:如果哈希值不同,是不需要判断equals。

你可能感兴趣的:(常用的集合类)