初见:集合框架和泛型

为什么使用集合框架

存储一个班学员的信息 假定20个学员

使用数组

如何存储每天的新闻信息?

数组固定长度存在一定缺陷

  如果不知道程序运行时会需要多少对象 或者需要更复杂方式存储对象 可以使用Java集合框架

 

集合框架

Java集合框架提供了一套性能优良 使用方便的接口和类 他们位于java,util包中

iterator<-------Collection<--------Map

 

Collection:所有Java集合框架的父接口

Collections:操作集合的一个工具类

 

Java的集合类主要由Map接口和Collection接口派生而来

其中Collection接口有两个常用的子接口 List 和 Set

所以通常说Java集合框架由三大类接口构成 Map List Set

 

Collection 接口存储一组无序不唯一的对象

List接口存储一组有序不唯一(插入排序)的对象 List接口继承自Collection接口 是有序集合 允许存放重复元素

List接口常用的实现类有ArrayList和LinkedList

Set接口存储一组无序唯一的对象

Map接口存储一组键值对象 提供key到value 的映射

 

List接口的实现类

   List

ArrayList   LinkedList

ArrayList实现了长度可变的数组 在内存中分配连续的空间 遍历元素随机访问元素的效率比较高

LinkedList 采用链表存储方式  插入删除元素时效率比较高

getfirst()、getlast()、addfirst()、addlast()、add()、remove()、get(i)、contains()、size()、equals()、sublist(0,1)、toArray(),indexOf(),lastIndexOf(),clear(),isEmpty();remove (int index )

 

新闻管理系统 需求如下

可以存储各类新闻标题(ID 名称 创建者)

可以获取新闻标题的总数

可以逐条打印每条新闻标题的名称

 

存储方式如何选择 ?

 元素个数不确定、使用集合类、需要遍历元素  ArrayList

存储对象如何确定? 类型 新闻标题

   属性 ID 名称 创建者

确定存储方式

ArrayList类是list接口的一个具体实现类

ArrayList对象实现了可变大小的数组

随机访问和遍历元素时 他提供更好的性能

 

ArrayList常用方法

boolean add(Object o ) 在列表的末尾顺序添加元素 起始索引位置从0开始

void add(int index,Object o)在指定的索引位置添加元素 索引位置必须介于0和列表中元 素个数之间

int size()返回列表中的元素个数

Object get(int index)返回指定索引位置处的元素 取出的元素时Object类型 使用前需要 进行强制类型转换

boolean contains(Object o ) 判断列表中是否存在指定元素

boolean remove(Object o)从列表中删除元素

Object remove (int index )从列表中删除指定位置元素 起始索引位置从0开始

 

Collection接口常用的通用方法还有:clear()清除所有元素 IsRmpty()/判断是否为空 是空返回true iterator() 返回一个集合的迭代器 toArray() 返回一个数组序列

 

ArrayList的优点是遍历元素和访问元素的效率比较高

数组操作频繁时 最好使用LinkedList存储数据

 

数组可以直接赋值 int [] num ={3,1}; --基本数据类型

集合里面不能放基本数据类型

 

新闻管理系统 需求

可以添加头条新闻标题

获取头条和最末条新闻标题

可以删除末条新闻标题

存储方式如何选择? 元素个数 不确定   使用集合类

  需要在列表的头或尾添加删除元素

确定存储方式

LinkedList类是List接口的一个具体实现类

LinkedList类用于创建链表数据结构

掺入过着删除元素时 他提供更好的性能

 

LinkedList常用方法

void addFirst(Object o) 在列表的首部添加元素

void addLast(Object o) 在列表的末尾添加元素

Object getFirst() 返回列表中的第一个元素

Object getLast() 返回列表中的最后一个元素

Object removeFirst() 删除并返回列表中的第一个元素

Object removeLast() 删除并返回返回列表中的最后一个元素

 

 

ArrayList和LinkedList都是有序重复的数据

ArrayList适用于遍历取值

LinkedList删除增加比较方便

 

Set接口

set接口存储一组唯一无序的对象

hashset是set接口常用的实现类

set中存放对象的引用

set接口如何判断假加入对象是否已经存在呢?

采用对象的equals()方法比较两个对象是否相等

 

HashSet是set接口常用的实现类

Set接口不存在get()方法

遍历数据的话 用增强型的for

或者通过迭代器Iterator实现遍历

获取Iterator:Collection接口的iterate()方法

Iterator的方法

Boolean hasNext():判断是否存在另一个可访问的元素

Object Next()返回要访问的下一个元素

 

//键不可以重复(会被替换),值可以重复!

 

map接口

Map 变量名=new Map();

建立国家英文简称和中文全名间的-值映射,并同伙key对value进行操作 应该如何实现数据的存储和操作呢?

map 接口专门处理键值映射数据的存储 可以根据键实现对值的操作

最常用的实现类是hashMap

Map接口常用方法

Object put(Object key,Object val)以键-值对的方式进行存储

Object get(Object key)根据键返回相关联的的值 如果不存在指定的键 返回Null

Object remove(object key)删除有指定的键映射的键值对

entrySet()得到一组键-值对;

int size()返回元素个数;

Set keySet()返回键的集合;

Collection values()返回值的集合;

Boolean containsKey(Object key)如果存在由指定得见映射的键值对 返回true;

 

遍历map集合

1.通过迭代器Iterator实现遍历

2.增强型for

3.键-值对

 

 

 

泛型: 解决强制类型转换时出现的异常问题。

 

Jdk1.5之后出现改写了集合框架中所有的接口而合理类

如何解决以下强制类型转换时容易出现的异常问题

list的get(int index)方法获取元素

map的get(OBject key )方法获取元素

lterator的next()方法获取元素

通过泛型

jdk5.0使用泛型改写了集合框架中所有的接口

 

把对象的类型作为参数,指定到其他类过着方法上从而保证类型转换的安全性和稳定性

本质是参数化类型

泛型结婚可以约束集合内的元素类型

典型泛型集合ArrayList<E>/HashMap<K,V>

<E> <K,V>表示该泛型集合中的元素类型

泛型集合中的数据不在转换为object

除了指定了集合中的元素类型外,泛型集合和之前学习的集合的用法完全一样

 

Collections算法类

Java集合框架将针对不同数据结构算法的实现都保存在工具勒种

Collections类下定义了一系列用于操作集合的静态方法

 

collections类常用方法

collection和collections 不同 前者是集合接口 后者是集合的操作类

collections提供的常用静态方法

sort()排序

binarySearch()查找

max()min()查找最大值 最小值

要实现一个类的对象之间比较大小 该类要实现Comparable接口 重写compareTo()方法

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值