黑马程序员-JAVA基础---集合框架

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一.集合类概述

1.1面向对象语言对事物的体现都是以对象形式的,为了方便对多个对象进行操作,需要用到集合来去存储对象。集合类和数组同是容器都可以存储对象,但是数组长度是固定的,他可以存储基本数据类型。集合只能存储不同类型对象,但长度是可变的。
1.2结合框架示意图
这里写图片描述
这些集合类都具有共性方法:添加元素、打印原集合、删除元素、判断元素、获取个数等。集合中获取元素是通过创建集合迭代器对象来去获取的,见如何代码,但是vector结合使用枚举取出:Enumeation。

二.List集合

Collection下的List包含ArrayList、LinkedList、Vector这3种存储数据的集合。ArrayList底层数据结构使用数组结构,所以查询数据很快但是增删慢,线程不同步。LinkedList底层数据结构是链表数据结构,所以增删速度很快,查询稍慢。Vecor底层数据结构也是数组结构,线程同步被ArrayList取代。List特有方法时操作角标的方法都是该体系的方法。
2.1–LinkedList 特有方法
使用结合类之前必须导包:import java.util.*;
(1)LinkedList特有方法:
addFirst();从集合第一顺位添加元素
addLast();从结合逆序第一位添加
GetFirst();获取第一顺位元素
GetLast();获取最后一位元素
注意:获取集合元素,但不删除元素,如果结合原本没有元素则程序会报NoSuchhElementException异常。

removeFirst();移除第一位元素
removerLast();移除最后一位元素
后续新版本替代这两个方法:
offerFirst();
offerLast();
注意:获取集合元素,但不删除元素,如果结合原本没有元素则程序会报NoSuchhElementException异常。

PeekFirst();
peekLast();
注意:获取集合元素,但不删除元素,如果集合没有元素则返回空null。
pollFirst();
pollLast();
注意:获取集合元素,但不删除元素,如果集合没有元素则返回空null。
练习:
这里写图片描述
这里写图片描述
一般来说实际编程频繁应用的还是ArrayList。

三Set集合

Set:元素是无序的(存入和取出顺序不一定一致),且不可重复。其包含了HashSet和TreeSet。
3.1–HashSet
HashSet底层数据结构是哈希表,线程不同步。他能保证元素唯一性的原理是判断元素的hashCode值是否相同,如果相同将进一步元素的equals()是否为ture,为ture则为相同元素
3.2–TreeSet
可以对Set集合元素进行排序,底层数据结构是“二叉树”。保证数据元素唯一性的依据compareTo方法,如果返回0则相同。

TreeSet排序有两种方式
1.让元素自身具备比较性,所以元素自身要实现Comparable接口覆盖CompareTo方法,这种方式成为元素的自然排序,或者默认排序。
2.当元素不具备比较性,或者具备的比较性是不需要的,这时就让集合具备比较性,在结合初始化时就有了比较方式,这就需要定义一个比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

四.泛型

1.概述泛型是JDK1.5之后出现的新特性,解决了存储元素安全性的问题。譬如我们定义要存储的数据的类型,而实际存储的不是定义的数据类型,这就会损失数据精度。

格式:
ArrayList sb = new ArrayList();尖括号里面就给存储的元素限定了数据类型,如果存储其他数据类型则编译失败。

泛型好处:将运行时期出现的问题ClassCastException,转移到了编译时期,方便程序员解决,让运行问题减少。避免强制转换的麻烦。

通常在集合框架都会使用到泛型。
2.泛型应用
泛型的深度应用就要掌握泛型类和泛型方法、泛型接口。
泛型类:在类名处加入<>,里面限定了创建的是什么类
泛型方法:在方法声明那里加入<>跟着修饰符后面,尖括号里面限制了参数类型,传递参数时,也要加上跟限定一致的泛型。
如:public void show(Q 参数)。
泛型接口:就是在接口上加入泛型。
注意:泛型类里可以有泛型方法,也可以没有。泛型方法即可在普通类,也可以在泛型类。

五.Map集合

1.概述
Map下含有Hashtable、HashMap、TreeMap,和Set很像Set底层就是使用Map的底层。
Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合线程同步。JDK1.0效率低。
HashMap:底层是哈希表数据结构,运行使用null键null值,线程不同步。JDK1.2效率高。
TreeMap:底层是二叉树数据结构,线程不同步,可以给Map集合键进行排序。
2.共性方法
1.添加元素put()方法,返回的是boolean,注意如果再次添加相同键而键值不同,则原来键值会被新的顶替掉。
2.根据传递键获取键值get(键)方法,所以可以通过这个方法来去确定一个键是否存在。
3.获取Map集合所有值,有点像Iterator
Collection<> co = 集合名.values()
3.Map集合取出方法
1.Set keySet:将Map所以键存入到Set集合中,Set本身就具备迭代功能,所以所有可以迭代方式取出所有值。根据get(),获取每个键对应键值。其原理就是将Map集合转换成Set集合通过迭代器取出。
2.Set

六.工具类

1.
Collections类就是集合的工具类,他的功能是使得操作集合更方便有效。
对应某个方法使用时格式:Collections.sort( )这个方法接受一个List变量,本身有一个默认的自然排序。如果要改变自定义对象比较器,把自定义的比较器,作为一个对象存在这个方法里面。

Collections.Max方法,得到集合最大值,自定义比较器时根据什么排序就返回对应的最大值。如长度,如大小。

Collections.fill()方法,将现有集合元素替换。

Collections.reverse.自定义比较器对象, 可以反转比较器方法。
2.
Arrays类是用于操作数据工具类,里面都是静态方法。
2.1数组变集合
Arrays.asList()括号里接受数组名,这个方法将数组变成集合,数组变成集合,可以使用集合方法操作数组数据,注意数组使用集合不可以使用集合增删方法,因为数组长度固定,如果增删就会引发UnSupportedOperationException.注意除了字符串数组外,如果数组中元素都是对象,那么变成集合时数组元素就直接变成集合元素,如果数组中元素是基本数据类型那么就将该数组作为集合元素存储。
2.集合变数组
Collection接口toArray方法。指定类型数据长度小于集合长度,该方法内部创建一个新的数组长度等于集合size,反之数组不创建,而是用传递进来的数组。变成数组后元,就限定了集合元素增删操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值