美文网首页
Java学习-Collection框架

Java学习-Collection框架

作者: Spring_Dragon | 来源:发表于2020-02-22 12:07 被阅读0次

title: Collection框架
date: 2020-01-17 20:12:45
tags:
-Collection框架
categories: Java学习
top: 10


前言

有了数组为什么还需要集合框架? 为了适应实际开发过程中,保存动态变化的数据集合,而数组一旦定义,长度将不能变化,于是就有我么动态增长的集合框架.

一组存储对象的容器(动态)

  • Collection接口:存储另一个元素的集合
  • Collections:操作集合的工具类
  • Map接口(图):存储键/值对
image

注意:集合框架中所有的具体类都实现了Cloneable和Serializabel接口,即他们的实例都是可复制且可序列化的。

Collection接口:

Collection接口:

方法 描述
boolean add(E e); 向集合中添加元素
int size(); 返回集合中的元素个数
void clear(); 删除集合中的所有元素
boolean remove(Object o); 从集合删除元素o
boolean removeAll(Collection<?> c); 从集合中删除集合c中的所有元素
boolean retainAll(Collection<?> c); 保留c和该集合都有的元素(交集)
boolean addAll(Collection<? extends E> c); 将集合c中所有元素添加到当前这个集合
boolean contains(Object o); 如果该集合包含对象o,返回true
boolean containsAll(Collection<?> c); 如果该集合中包含集合c中所有元素,返回true
boolean isEmpty(); 如果集合不包含任何元素,则返回true
Iterator<E> iterator(); 返回该集合中元素所有的迭代器
Object[] toArray(); 返回该集合元素构成的Object数组

三种主要子接口

  1. Set(规则类):存储一组不重复的元素
  2. List(线性表):存储一个有序集合
  3. Queue(队列):存储用先进先出方式处理的对象
image

注意:Collection是集合最高接口,但是直接使用Collection接口会造成操作意义不明确,所以在实际开发中不直接使用Collection接口

List接口

具有索引的List接口

方法 描述
public void add(int index, E element) 在指定位置增加元素
public boolean addAll(int index, E element) 在指定位置增加一组元素
E get(int index) 返回指定位置元素
public int indexOf(Object o) 查找指定元素的位置
public int lastindex Of(Object o) 从后往前查找指定元素的位置
public Listlterator<E> listlterator() 获得List迭代器对象(可以在指定位置向前或向后访问,可以修改集合中的元素)
public E remove(int index) 删除指定位置的元素
public List<E> subList(int fromlndex, int tolndex) 取出集合中的子集合
public E set(int index, E element) 替换指定位置的元素

List接口下的三个实现类

  • ArrayList --数组线性表,是一个大小可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高。
  • LinkedList --链表,采用链表存储方式,提供从线性表两端提取、插入和删除元素的方法,插入、删除元素效率比较高。

List接口扩展了Collection接口的方法,这些方法使用起来比父接口更加方便,要使用List接口,需要对List接口的实现类实例化

Set接口

用来操作存储一组唯一,无序的对象 v

Set接口下的三个实现类

  • HashSet -- 用来存储互不相同的任何元素
  • LinkedHashSet -- 使用链表扩展实现HashSet类,支持对元素的排序
  • TreeSet -- 可以确保所有元素是有序的

Queue接口

通常用于操作一组队列方式的对象信息(一般存储方式为先进先出)

方法 描述
boolean offer(element) 向队列中插入一个元素(类型add方法)
E poll() 获取并删除队列头元素,如果队列为空返回null
E remove() 获取并删除队列头元素,如果队列为空抛出异常
E peek() 获取但不删除列头元素,如果队列为空返回null
E element() 获取但不删除列头头元素,如果队列为空抛出异常

主要实现子类

  • PriorityQueue 优先队列,最小值拥有优先级最先删除。
  • ArrayQueue 双端队列,集合容量可动态扩展

注意:

1.Deque支持在两端插入和删除元素,是双端队列的简称(double-ended queue),支持从两端操作队列的元素

2.定义的方法:addFirst(e), removeFirst(e), addLast(e), removeLast(e), getFirst()/getLast()

Map接口

以键-值存储元素的容器,根据关键字(key)找到对应的数据

方法 描述
V put(key,value) 将一个键/值映射放入图中
V get(key) 根据键获取对应的value值
Set<K> keySet() 返回包含键的规则集
Collection<V> values() 返回包含值得集合
boolean containsKey(key) 返回图中是否包含键值key
Set<Map.Entry<K,V>> entrySet() 返回一个图中包含条目的规则集
int size() 返回途中的键值对个数
V remove(key) 删除指定键对应的条目

其主要子类及其用途

子类 描述
HashMap 查询、插入和删除比较高效
LinkedHashMap 支持元素的排序
TreeMap 遍历有序的键值时非常高效、
Properties 一般用于操作属性文件

Map三种遍历方式

  • 通过Map.keySet遍历key,通过key取出对应的value(比较常用,需要二次取值)
for(String key : treeMap.keySet()){
    System.out.println(key + "--" + treeMap.get(key));
}
  • 通过Map.entrySet使用迭代器遍历key和value(不常用,代码复杂)
Set<Map.Entry<String, Integer>> entrySet = treeMap.entrySet();
Iterator<Map.Entry<String, Integer>> entrySetIt = entrySet.iterator();
while(entrySetIt.hasNext()){
    Map.Entry<String, Integer> entry = entrySetIt.next();
    System.out.println(entry.getKey() + "--" + entry.getValue());
}
  • 直接遍历Map.entrySet集合(容量大时,使用此方法)
for(Entry<String, Integer> entry : treeMap.entrySet()){
    System.out.println(entry.getKey() + "--" + entry.getValue());
}

相关文章

网友评论

      本文标题:Java学习-Collection框架

      本文链接:https://www.haomeiwen.com/subject/idhlqhtx.html