Java基础知识——集合

58 阅读49分钟
  • Collection
  • List
  • Set
  • 泛型
  • Map
  • Collections

一、Collection

  • 单列集合的顶层接口,表示一组对象,这些对象也称为Collection元素
  • JDK不提供Collection接口的任何实现,它提供更具体的子接口(Set、List)的实现
  • 创建Collection集合的对象
  1. 采用多态的方式: Collection c = new ArrayList()
  • Collection集合的遍历方式, Iterator : 迭代器,集合的专用遍历方式。

  • 迭代器是通过集合的iterator方法得到的,所以我们说它是依赖于集合而存在的。

  • iterator中的常用方法:

  •  E next():                 返回迭代中的下一个元素

  • boolean hasNext(): 判断是否还有下一个元素(迭代具有更多元素,则返回true)

  • 常用方法:

  • boolean add(E e)                  添加元素

  • boolean remove(Object o)   从集合中移除指定的元素

  • void clear()                            清空集合中的元素

  • boolean contains(Object o)  判断集合中是否存在指定的元素

  • boolean isEmpty()                 判断集合是否为空

  • int size()                                 集合的长度,也就是集合中元素的个数

二、List

  • List是有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中元素。

  • 与Set集合不同,列表允许重复的元素

  • 特点:

  • 有序:存储和取出的顺序一致

  • 可重复:存储的元素可以重复

  • 常用方法:

  • void add (int index, E element)   在集合的制定位置插入指定的元素

  • E remove(int index)                     删除指定索引处的元素,返回被删除的元素

  • E set(int index, E element)        修改指定索引处的元素,返回被修改的元素

  • E get(int index)                            返回制定索引处的元素

  • 增强for循环: 简化数组和Collection集合的遍历

  • 实现Iterable接口的类,允许其对象称为增强for语句的目标

  • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器

  •   格式:
      for(元素数据类型 变量名: 数组或者Collection集合){
         //在此处使用变量即可,该变量就是元素}
      }
    
  • List实现类特点:

  • 常用子类:

  • ArrayList : 底层实现是数组,查询快,增删慢

  • LinkedList:底层实现是链表,查询慢,增删快

  • 特有功能:

  • public void addFirst(E e)  在该列表开头插入指定元素

  • public void addLast(E e)   将指定元素追加到此列表的末尾

  • public E getFirst()              返回此列表中的第一个元素

  • public E getLast()              返回此列表中的最后一个元素

  • public E removeFirst()       删除并返回第一个元素

  • public E removeLast()       删除并返回最后一个元素

三、Set

  • 继承 Collection集合,不包含重复元素的集合,是一个接口

  • 没有带索引的方法,所以不能使用普通的for循环

  • 哈希值:是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

  • Object类中有一个方法可以获取对象的哈希值

  • public int hashCode()   返回对象的哈希码值

  • 默认情况下,不同对象的哈希值是不同的

  • 通过此方法重写,可以实现不同对象的哈希值是相同的

  • 实现类

  • HashSet

  • 底层数据结构是哈希表【数组和链表实现

    

  • 对集合迭代顺序不做任何保证

  • 没有带索引的方法,所以不能使用普通的for循环遍历,可以使用迭代和增强for

  • 要保证元素唯一性,需要重写hashCode()和equals()

  • HashSet集合添加一个元素的过程

                             

  • LinkedHashSet : 继承 HashSet类

  • 底层数据结构:哈希表和链表实现set接口,具有可预测迭代次序 

  • 由链表保证元素 有序,也就是说元素的存储和取出顺序是一致的

  • 由哈希表保证元素唯一,即没有重复元素

  • TreeSet

  • 元素有序 : 这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法

  • TreeSet(): 根据元素的自然排序进行排序

  • TreeSet(Comparator comparator): 根据指定的比较器进行排序

  • 比较器排序,就是让集合构造方法接受Comparator的实现类对象,重写compare(T o1, T o2)方法 【实际运用最多】

  • 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

  • 没有带索引的方法,所以不能使用普通的for循环遍历,可以使用迭代和增强for

  • 由于是Set集合,所以不包含重复元素的集合

四、泛型

JDK5中引入的特性,提供编译时类型安全检测机制,该机制允许在编译时检测到非法的类型

  • 本质:参数化类型 【将类型由原来的具体类型参数化,然后在使用/调用时传入具体的类型】

  • 分类

  • 泛型类

  • 泛型方法

  • 泛型接口

  • 类型通配符 

  • : 通配符
  • : 通配符上限
  • List<? extends Number> : 表示类型时Nuber或者其子类型

  • : 通配符下限
  • List<? super Number> : 表示类型时Nuber或者其父类型

五、Map

  •  interface Map<K, V> : K 键的类型;V: 值的类型

  •  将键映射到值的对象,Map不能包含重复的键,每个键可以映射到最多一个值

  • 创建Map集合对象

  • 多态的方式

  • 具体的实现类 HashMap

  • Map集合的基本功能

  • V put(K key, V value)                           添加元素

  • V remove(Object key)                         根据键删除键值对元素

  • void clear()                                          移除所有的键值对元素

  • boolean containsKey(Object key)       判断集合是否包含指定的键

  • boolean containsValue(Object value) 判断集合是否包含指定的值

  • boolean IsEmpty()                               判断集合是否为空

  • int size()                                               集合的长度,也就是集合中键值对的个数

  • Map集合的获取功能

  • V get(Object key)                                根据键获取值

  • Set keySet()                                  获取所有键的集合

  • Collection values()                       获取所有值的集合

  • Set<Map.Entry<K,V>> entrySet()      获取所有键值对对象的集合

六、Collections

Collection是一个顶层接口,而Collections 是一个类,可以看做是针对结合的工具操作类

  • 是针对集合操作的工具类

  • Collections类的常用方法:

  • public static <T extends Comparable<? super T>> void sort(List list) :将制定的列表按升序排序

  • public static void reverse(List<?>list): 反转制定列表中元素的顺序

  • public static void shuffle(List<?>list) : 使用默认的随机源随机排列制定的列表

  • 使用示例:

    List<Integer> list = new ArrayList<Integer>()
    list.add(30);
    list.add(40);
    Collections.sort(list) // 调用Collections的sort方法进行排序