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);

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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