Java集合框架

Java集合框架

Java集合框架是一个统一的体系结构,包含三块内容:接口、实现类和算法。
1、接口:上图的上半部分都是接口,包括Collection、List、Set、Map等。
2、实现类:上图的下半部分都是实现类,常见的包括ArrayList、HashMap等。
3、算法:提供了查找、排序等多种算法实现。
在这里插入图片描述
Java集合框架中的接口虽然都提供了存储大量、复杂数据的功能,但是它们之间也存在着明显的差别。
1、Collection 接口存储一组允许重复、无序的对象
2、List接口存储一组允许重复、有序的对象,如下图所示:

3、Set接口存储一组不允许重复、无序的对象,如下图所示:

4、Map接口存储一组成对的键值对象,提供key到value的映射。Map中的key可以无序, 但不允许重复,value也可以无序,但允许重复。

List接口及其实现类

List的主要特征是其元素以线性方式存储,集合中允许存放重复对象。List接口的常见实现类有ArrayList和LinkedList。它们可以存储所有类型的对象(包括null),允许重复,保证有序。其中区别在于:
1、ArrayList代表长度可变的数组。允许对元素进行快速的随机访问,但是向ArrayList中插入与删除元素的速度较慢。
2、LinkedList在实现中采用链表数据结构。对顺序访问进行优化,向LinkedList中插入和删除元素的速度较快,随机访问速度则相对较慢。所谓随机访问是指检索位于特定索引位置的元素。

下表列出了List接口定义的一些常用方法。
在这里插入图片描述
ArrayList和LinkedList虽然都实现了上述这些方法,但是它们之间还是存在不少区别,在使用的时候需要根据它们各自的优缺点做出选择。

ArrayList

ArrayList采用的是和数组相同的存储方式,即在内存中分配连续的空间来存储数据。它的优点在于遍历集合元素和随机访问元素的效率比较高。

1 存储特性:实现了List接口,隶属于List,具有List的存储特性
2 常用方法:上面提到过的List的常用方法 (因为实现了List接口,所以实现了List所有的方法)
3 性能:查看快,增,删慢

LinkedList
LinkedList采用的是链表存储方式,如下图所示:

它的优点在于向集合中插入、删除元素时效率比较高,特别是可以直接对集合的首部(上图中表头L直接指向的第一个元素)和尾部(首部的Priou直接指向尾部)元素进行插入和删除操作,LinkedList提供了专门针对首尾元素的方法,在List接口之外,LinkedList还具有以下独有方法:

在这里插入图片描述

1 存储特性:实现了List接口,隶属于List,具有List的存储特性
2 常用方法:除了上面提到过的List的常用方法 (因为实现了List接口,所以实现了List所有的方法),有自己独有的方法:对头部和尾部进行操作 First() ,Last()
3 性能:增删快,查询慢

泛型

泛型的用法:
创建集合对象的时候最好指定该集合存放的元素类型。
**泛型:**可以理解为广泛的统一的类型,泛型集合要两个要求:
1、定义是指定内部元素的类型,随后往里头放置于元素时,必须是这种类型。
2、从集合中读取出数据是,不需要进行类型转换,直接就是定义时指定的内部元素类型。
语法:
List 集合对象=new ArrayList( );
Map<K,V> 集合对象=new HashMap<K,V>( );
优势:
1、可读性,从字面上就可以判断集合中的内容类型;
2、类型检查,避免插入非法类型;
3、获取数据时不在需要强制类型转换。

Map接口及其实现类

Map接口专门用来存储和处理键值对数据。他可以存储多个数据,每个元素都有两个对象组成,一个称之为键(key),一个称之为值(value),键和值存在对应关系。

其中键不要求有序,但不允许重复,值也不要求有序,但允许重复。

HashMap的使用

1、HashMap的遍历

Map通过key可以获得value;所以只要得到所有的key就可以遍历Map集合。

Map接口的keySet()的方法可以得到该Map对象的所有的key组成的Set集合,然后迭代这个包含key的set集合即可。

Set集合的特点:
不能存储相同的元素。
同时因为其是一个抽象的接口:所以不能直接实例化一个set对象。(Set s = new Set() )错误
该接口主要继承于Collections接口,所以具有Collection的一些常见的方法。

常见的方法:

add( ) 向集合中添加元素

clear( ) 去掉集合中所有的元素

contains( ) 判断集合中是否包含某一个元素

isEmpty( ) 判断集合是否为空

iterator( ) 主要用于递归集合,返回一个Iterator()对象

remove( ) 从集合中去掉特定的对象

size( ) 返回集合的大小

Set接口最长用的两大实现:HashSet TreeSet

Java中Iterator用法整理
迭代器(Iterator)
  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
  Java中的Iterator功能比较简单,并且只能单向移动:
  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
  (2) 使用next()获得序列中的下一个元素。
  (3) 使用hasNext()检查序列中是否还有元素。
  (4) 使用remove()将迭代器新返回的元素删除。
  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

Iterator的接口定义:

public interface Iterator {
  boolean hasNext();
  Object next();
  void remove();
}

使用: 
Object next():返回迭代器刚越过的元素的引用,返回值是Object,需
    要强制转换成自己需要的类型
    boolean hasNext():判断容器内是否还有可供访问的元素
    void remove():删除迭代器刚越过的元素
    
迭代使用方法:
迭代其实可以简单地理解为遍历,是一个标准化遍历各类容器里面
的所有对象的方法类
for(Iterator it = c.iterator(); it.hasNext(); ) {
  Object o = it.next();
   //do something
}

遍历集合的语法:
for(Type t:c){……}
c表示需要遍历的集合
Type表示集合内的元素类型
t引用每次从集合中取出的当前元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值