集合的一些概念

集合类的由来

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

集合特点

  1. 用于存储对象的容器;
  2. 集合的长度可变;
  3. 集合中不可以存储基本数据类型值。
  4. 集合容器因为内部数据结构不同,有多种具体容器。不断地向上抽取形成了集合框架。
Collection的常见方法:
  1. 添加。
    boolean add(Object obj);
    boolean add(Collection coll);
  2. 删除。
    boolean remove(Object obj);
    boolean removeAll(Collection coll);
    void clear();
  3. 判断。
    boolean contains(Object obj);
    boolean containsAll(Collection coll);
    boolean isEmpty();
  4. 获取。
    int size();
    Iterator iterator():取出集合中的元素的方法。(迭代器)
  5. 其他。
    boolean retainAll(Collection coll);取交集。
    Object[] toArray();将集合转成数组。

Collection

 |–List:有序(存入和取出的顺序一致),元素都有索引,元素可重复。
 |–Set:元素不能重复,无序。

List特有的常见方法

共性特点:都可以操作下标。

  1. 添加。
    void add(index, element);
    void add(index, collection);
  2. 删除。
    Object remove(index);
  3. 修改。
    Object set(index, element);
  4. 获取。
    Object get(index);
    int indexOf(object);
    int lastIndexOf(object);
    List subList(from, to);

List集合可以完成对集合元素的增删查改。

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


Set

Set:元素不可重复,无序。
Set接口中的方法和Collection一致。
 |—HashSet:内部数据结构是哈希表,是不同步的。
   如何保证该集合的唯一性呢?
   是通过对象的hashCode和equals方法来判断对象唯一性的。如果对象的hashCode值不同,那么不用判断equals方法,直接将对象存储到哈希表中;如果对象的hashCode值相同,再判断equals方法。如果为true,则视为相同元素,不存;如果为false,那么视为不同元素,进行存储。
注:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法,以确定判断对象是否相同的依据。
 |—TreeSet:可以对Set集合中的元素按照指定顺序排序。该集合判断元素唯一性的方式为:根据比较方法的返回结果是否是0。如果是0,就是相同元素;否则, 就是不同元素。
   TreeSet对元素进行排序的方式一:
   让元素自身具备比较功能,元素需要实现Comparable接口,即覆盖compareTo方法。
   如果不要按照对象中具备的自然顺序排序,或者对象中不具备自然顺序。可以使用TreeSet集合的第二种排序方式:
   让集合自身具备比较功能。定义一个类实现Comparator接口,覆盖compare方法,将该类的对象作为参数传递给TreeSet集合的构造函数。

-----------------------------------------------------------------------------------------------------------------------------------------------

Map(和Collection一个层次)
Map集合的特点:

Map:一次添加一对元素。Collection一次添加一个元素。
Map也称双列集合,Collection也称单列集合。
Map集合存储键值对。
Map集合中必须保证键的唯一性。

Map集合的常见方法:
  1. 添加。
    V put(K key, V value);返回前一个和key关联的值,如果没有,返回null。
  2. 删除。
    void clear();清空Map集合。
    V remove(key);根绝指定的key删除这个键值对。
  3. 判断。
    boolean containsKey(key);
    boolean containsValue(value);
    boolean isEmpty();
  4. 获取。
    value get(key);通过键获取值,如果没有该键,返回null。同样地,可以通过返回null来判断是否包含指定键。
    int size();获取键值对的个数。
Map的常用子类

 |—Hashtable:内部结构是哈希表,是同步的。不允许null作为键或值。
   用来存储键值对型的配置文件的信息,可以和IO技术相结合。
 |—HashMap:内部结构是哈希表,是不同步的。允许null作为键或值。
 |—TreeMap:内部结构是二叉树,是不同步的。可以对Map集合中的键进行排序。

集合的一些技巧

  1. 判断是用哪个集合
    需要唯一吗?
      需要:Set
        需要指定顺序吗?
          需要:TreeSet
          不需要:HashSet
          但是想要一个和存储一致的顺序(有序):LinkedHashSet
      不需要:List
        需要频繁增删吗?
          需要:LinkedList
          不需要:ArrayList
  2. 如何记忆每个容器的结构和所属体系呢?
    看名字。根据后缀名看体系。前缀就是该集合的数据结构。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值