java学习笔记(四)集合框架

一.为什么需要集合框架?
假如我们现在需要存储新闻信息的话,每天的新闻数量是不固定的,时刻都会发生变化,那存储新闻的数组我们不清楚到底该设置多大的长度,这时,java提供了集合框架,方便我们存取大量的、复杂的并且数量不定的数据。
二.什么是java集合框架?
java集合框架是一个统一的体系结构,包含三块内容:接口、实现类和算法。
1.接口:(1)Collection(爸爸级别)----------List(儿子级别、有序)-----------Set(儿子级别、无序)
(2)Map(爸爸级别)
注意:[List、Set是继承了Collection]
2.实现类:(1)list接口的实现类分别有ArrayList、LinkedList (2)Set接口的实现类有HashSet、TreeSet
(3)Map接口的实现类分别有HashMap、TreeMap
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接口的常用方法:
返回值类型+方法名 说明
boolean add(Object o) 在集合的末尾添加元素,起始索引从0开始
void add(int index,Object o) 在指定的索引位置添加元素
int size() 获得集合中的元素个数
Object get(int index) 获得指定索引位置处的元素
boolean contains(Object o) 判断集合中是否已存在指定元素
boolean remove(Object o) 从列表中删除制定元素
Objectremove(int index) 从列表中删除指定位置的元素
这些方法他的实现类ArrayList和LinkedList都可以实现
3.ArrayList介绍
ArrayList采用的是和数组相同的存储方式,即在内存中分配连续的空间来存储数据。它的优点在于遍历集合元素和随机访问元素的效率比较高
创建ArrayList集合例子:List 名字=new ArrayList();
遍历集合:for(int i=0;i<名字.size();i++){}
4.LinkedList介绍
LinkedList采用的是链表存储方式,
它的优点在于向集合中插入、删除元素时效率比较高,特别是可以直接对集合的首部(上图中表头L直接指向的第一个元素)和尾部(首部的Priou直接指向尾部)元素进行插入和删除操作,LinkedList提供了专门针对首尾元素的方法,在List接口之外,LinkedList还具有以下独有方法:
返回值类型+方法名 说明
void addFirst(Object o) 在集合的首部添加元素
void addLast(Object o) 在集合的末尾添加元素
ObjectgetFirst() 返回集合中的第一个元素
ObjectgetLast() 返回集合中的最后一个元素
ObjectremoveFirst() 删除并返回集合中的第一个元素
ObjectremoveLast() 删除并返回集合中的最后一个元素
创建LinkedList集合例子:LinkedList 名字=new LinkedList();
遍历集合:for(int i=0;i<名字.size();i++){}
五、Set接口及其实现类
1.Set接口是Collection的子接口,可以存储无序、不重复的元素。HashSet和TreeSet是Set接口的常用实现类,HashSet采用散列方式存储数据。
(1)创建HashSet对象,Set 名字=new HashSet();
注意:HashSet集合不允许有重复的元素,并且存储顺序与添加顺序无关。当一个新的对象添加到Set集合中的时,Set的add()方法是首先判断这个对象是否已经存在于集合中,Set采用对象的equals()方法比较两个对象是否相等,而不是采用==比较运算符。
(2)创建TreeSet对象 Set 名字=new TreeSet();
当TreeSet向集合中加入一个对象时,会把它插入到有序的对象序列中。那么TreeSet是如何对对象进行排序的呢?TreeSet支持两种排序的方式:自然排序和自定义排序。在默认情况下TreeSet采用自然排序方式。
3.Comparable接口的一些类的排序方式。
类:BigDecimal、BigInteger、Byte、Double、Float、Integer、Long、Short:按数字大小排序
类:Ccharacter:按字符的Unicode值的数字大小排序
类:String:按字符串中的Unicode值排序
Comparable接口有一个 compareTo(Object o)方法,它返回整数类型。对于表达式x.compareTo(y),如果返回值为0,则表示x和y相等,如果返回值大于0,则表示x大于y,如果返回值小于0,则表示x小于y。TreeSet对象在进行add时调用对象的compareTo()方法比较集合中对象的大小,然后进行升序排列,这种排序方式称为自然排序。
注意:使用自然排序时,只能向TreeSet集合中加入同类型的对象,并且这些对象的类必须实现了Comparable接口,否则的话会出现类型转换异常。
4.迭代器
所有实现List接口的类,都可以通过get(下标)的方式来访问里头的元素,但是实现Set类比如HashSet不可以通过get(下标)来访问。
这时java提供了一个迭代器Iterator来解决这个问题,所有从Collection直接或间接继承而来的接口和类(包括List和Set)都实现了Iterable接口,此接口中包含一个方法:
Iterator<> iterator();
正常set实现这个迭代器如下:
Set + 名字=new HashSet();
Iterator 名字1=名字.iterator();
while(名字1.has,next()){
}
迭代器的常用方法:
返回值类型+方法名 说明
boolean hasNext() 判断集合中是否还有下一个元素
Object next() 返回集合中的下一个元素
六、Map接口及其实现类
Map接口的实现类有HashMap、Properties、HashTable
Map接口专门用来存储和处理键值对数据。它可以存储多个元素,每个元素都有两个对象组成,一个称之为键(key),一个称之为值(value),键和值之间存在对应关系。
其中键不要求有序,但不允许重复,值也不要求有序,但允许重复。下列出了Map接口定义的常用方法。
返回值类型+方法名 说明
Objectput(Objectkey,Object val) 以键-值对的方式添加数据
Object get (Object key) 根据键返回相对应的值,如果不存在指定的键,返回null
Object remove (Object key) 删除由指定的键对应的键-值对
int size() 获得元素个数
Set keySet () 返回键的集合
Collection values () 返回值的集合
boolean containsKey(Object key) 如果存在由指定的键对应的键-值对,返回true,否则返回false
1.HashMap的使用
Map 名字=new HashMap();
2.遍历HashMap
Map通过key可以获得value;所以只要得到所有的key 就可以遍历Map集合。Map接口的keySet()的方法可以得到该Map对象的所有的key组成的Set集合,然后迭代这个包含key的set集合即可。
(1)创建Map集合 Map 名字1=new HashMap();
(2)创建Set对象 Set 名字2=名字1.keySet();
(3)创建迭代器 Iterator 名字3=名字2.iterator();
(4)遍历循环 while(名字3.hasNext()){ }
七:泛型
以上集合类中都可以存放任何类型(因为都是Object类型)的数据,但是大部分情况下集合中存储的数据是同一个类别,而不是一会存放Book对象,一会又向集合存放Product对象。就像书架上只存放图书,而不应该把食用盐放到书架上一样。怎么样能保证一个集合中存放相同的类型呢?即创建集合对象的时候最好指定该集合存放的元素类型,这就是泛型的用法了。
泛型:可以理解为广泛的统一的类型,泛型集合要两个要求:
1.定义时指定内部元素的类型,随后往里头放置元素时,必须是这种类型。
2.从集合中读取出数据时,不需要进行类型转换,直接就是定义时指定的内部元素的类型。
具体语法:
List 名字=new ArrayList();
这时这个集合只能接受String类型的;
(1)for-迭代器
遍历集合的语法为 for(类型 名字 :需要遍历的集合);
注意:集合必须是泛型集合,否则不可以使用这种语法来遍历

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值