Java学习-Collection框架


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());
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • 四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。生活中很多数据的描述都采...
    佘大将军阅读 752评论 0 2
  • 转载自:Java集合框架实例 1- 介绍 集合是程序和语言的基本思想。应用程序通常都会应用到集合,例如雇员的信息,...
    01_小小鱼_01阅读 397评论 0 1
  • 本系列出于AWeiLoveAndroid的分享,在此感谢,再结合自身经验查漏补缺,完善答案。以成系统。 Java基...
    济公大将阅读 1,528评论 1 6
  • Java集合框架 Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述...
    小石38阅读 360评论 0 0
  • 今早照例翻看微博,看见几个关注人转发了这条博,为古筝发声。看了看刘先生的观点,不禁义愤填膺,写下简短的评论,仅代表...
    桵㲸阅读 1,903评论 1 0