java 集合概述

一、集合概述

Java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。而数组长度固定,不能满足变化的要求。所以,java提供了集合。

特点

1.        长度可以发生改变

2.        只能存储对象

3.        可以存储多种类型对象

与数组区别

数组

集合

长度

固定

可变

存储元素

基本类型/引用类型

引用类型

元素类型的一致性

必须一致

可以不一致

二、集合体系

集合作为一个容器,可以存储多个元素,但是由于数据结构的不同,java提供了多种集合类。将集合类中共性的功能,不断向上抽取,最终形成了集合体系结构。

数据结构:数据存储的方式

Java中集合类的关系图

集合体系导图(用鼠标拖动图片可看大图或右击图片选择在新标签页中打开图片(I))

三、Collection

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行,于是衍生出两个子类接口List和Set。

Collection基本功能

A:添加功能

boolean add(Object obj):向集合中添加一个元素

boolean addAll(Collection c):向集合中添加一个集合的元素。

B:删除功能

void clear():删除集合中的所有元素。

boolean remove(Object obj):从集合中删除指定的元素

boolean removeAll(Collection c):从集合中删除一个指定的集合元素。

C:判断功能

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

boolean contains(Object obj):判断集合中是否存在指定的元素。

boolean containsAll(Collection c):判断集合中是否存在指定的一个集合中的元素。

D:遍历功能

Iterator iterator():就是用来获取集合中每一个元素。

E:长度功能

int size():获取集合中的元素个数

F:交集功能

boolean retainAll(Collection c):判断两个集合中是否有相同的元素。???

G:把集合转换成数组

Object[] toArray():把集合变成数组。

List接口

List接口下的集合元素存储有序,可以重复。

List的特有功能

A:添加功能

void add(int index, Object obj):在指定位置添加元素

B:删除功能

Object remove(int index):根据指定索引删除元素,并把删除的元素返回。

C:修改功能

Object set(int index, Object obj):把指定索引位置的元素修改为指定的值,返回修改前的值。

D:获取功能

int indexOf(Object o):返回指定元素在集合中第一次出现的索引

Object get(int index):获取指定位置的元素

ListIterator listIterator():列表迭代器

E:截取功能

List subList(int fromIndex, int toIndex):截取集合。

Set 接口

Set接口下的元素无序,不可以重复。其下面分为HashSet和TreeSet。

HashSet

底层数据结构是哈希表,线程不安全,效率高。

保证唯一性依赖两个方法:hashCode()和equals()。

顺序:

判断hashCode()值是否相同。

相同:继续走equals(),看返回值

如果true:就不添加到集合。

如果false:就添加到集合。

不同:就添加到集合。

TreeSet

底层数据结构是二叉树,线程不安全,效率高。

保证元素唯一性的方法时根据返回值是否是0。

保证排序的两种方式:

自然排序(元素具备比较性):实现Comparable接口

比较器排序(集合具备比较性):实现Comparator接口

四.迭代器的使用

使用步骤:

1、通过集合对象获取迭代器对象。

2、通过迭代器对象判断。

3、通过迭代器对象获取。

迭代器原理

由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。

这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种集合的时候,只要该集合内部实现这个接口即可。

迭代器源码

[java]view plaincopy

publicinterfaceIterator

{

publicabstractbooleanhasNext();

publicabstractObject next();

}

publicinterfaceCollection

{

publicabstractIterator iterator();

}

publicinterfaceListextendsCollection

{

...

}

publicclassArrayListimplementsList

{

publicIterator iterator()

{

returnnew Itr();

}

privateclassItrimplementsIterator

{

publicboolean hasNext(){...}

publicObject next(){...}

}

}

Collection存储字符串和自定义对象并通过迭代器遍历

1、存储字符串

[java]view plaincopy

Collection c =newArrayList();

c.add("hello");

c.add("world");

c.add("java");

Iterator it = c.iterator();

while(it.hasNext())

{

String s = (String)it.next();

System.out.println(s);

}

2、存储自定义对象(Student类的代码省略)

[java]view plaincopy

Collection c=newArrayList();

Student s1=newStudent("林青霞",26);

c.add("s1");

Iterator it=c.iterator();

while(it.hasNext())

{

String s=(String)it.next();

System.out.println(s);

}

ListIterator迭代器是Iterator的子接口

所以List的遍历方式共有三种

1、Iterator迭代器

2、ListIterator迭代器

3、普通for+get()

五.Map

map是一个键值对形式的集合。它的元素都是有键和值组成。Map的键(key)是唯一的,值(value)可以重复。

Map的功能:

A:添加功能

V put(K key ,V value) :当key在集合中不存在是,添加元素;当key存在时替换元素

B:判断功能

boolean containsKey (Object key) :判断指定的键是否在集合中存在

Boolean containsValue(Object value):判断指定的值是否在集合中存在

Boolean isEmpty() :判断集合是否为空

C:删除功能

Void clear():清除所有键值对数据

D:获取功能

Object get (Object key) :根据键获取值

Set keyset(): 所有键的集合

Collectionvalues() :所有值的集合

E:长度功能

Int size()

Map包括HashMap、HashTable和TreeMap。其中,HashTable已基本被HashMap取代,这里不做讨论。

(注:HashMap支持null , HashTable不支持null )

Map遍历的两种方式:(导图上面已有,这里直接上代码了)

键找值:

[java]view plaincopy

publicstaticvoidmain(String[] args) {

Map map =newHashMap();

map.put("二阳",23);

map.put("二峥",24);

map.put("二光",25);

Set keys=map.keySet();//把键其中起来,存入到set集合中.

for(String key:keys){//遍历键集合,获取每一个键。增强for

Integer value=map.get(key);//让键去找值 get(Object key)

System.out.println(key+"***"+value);

}

}

键值对:

[java]view plaincopy

publicstaticvoidmain(String[] args) {

Map map =newHashMap();

map.put("二阳",23);

map.put("二峥",24);

map.put("二光",25);

Set> set=map.entrySet();//获取键值对集合。Set<> entrySet()

for(Map.Entry me:set){//遍历键值对集合,获取到每一个键值对。增强for,迭代器

String key=me.getKey();//通过键值对获取键getKey()

Integer value=me.getValue();//通过键值对获取值getValue()

System.out.println(key+"***"+value);

}

}

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

推荐阅读更多精彩内容

  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX阅读 874评论 0 1
  • 一、集合框架的概述 1、概述: 1、简述:所谓集合,就是为方便对多个对象的操作,对对象进行存储。集合就是存储对象最...
    玉圣阅读 512评论 0 4
  • 写在前面自开始在公司实习以来,经常都要用到集合框架。不仅后台要用,在前台做数据交互的时候用得也多。所以我想着是时候...
    EakonZhao阅读 3,267评论 0 12
  • 3.3 集合 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另...
    闫子扬阅读 726评论 0 1
  • 花城拾光阅读 263评论 0 1