Java集合框架

Java集合框架

        在很多时候我们需要统计数据时会常用数组来完成,但是数组在处理一些问题时存在明显的缺陷,而集合完全弥补了数组的缺陷,它比数组更灵活更实用,可大大提高软件的开发效率,并且不同的集合可适用于不同的场合。

        集合框架是为表示和操作集合而规定的一种统一的标准系结构,它包含三大部分:对外的接口、接口的实现和对集合运算的算法。

        接口:表示集合的抽象数据类型,如Collection、List、Set、Map、Iterator。

        实现:集合框架中接口的具体实现,如:ArrayList、LinkList、HashMap、HashSet。

        算法:计算方法,如查找、排序等,如工具类Collections。

        Java集合框架共有三大类接口:List、Set、Map。其中,Set和List拥有一个共同的父接口Collection接口。集合如果要限定数据类型,只能放引用数据类型。

一、List接口

        List接口继承Collection接口,存储一组不唯一(允许重复)、有序的对象。

1、ArrayList

        ArrayList在new对象时,可以限定数据类型,也可以不限定,它的语法以及常用方法是:

List list = new ArrayList();   //此行创建对象的代码也可以限定数据类型
ArrayList<String> list = new ArrayList<String>();    //此行创建对象的代码也可以不限定数据类型

//常用方法
list.add(Object);     //添加数据
list.add(int,Object);     //在指定位置添加数据
list.get(下标);     //取数据,下标从0开始到【长度-1】结束
list.size();       //得到长度
list.contains(Object);    //判断列表中是否存在指定元素
list.remove(int/Object);   //删除值,删除值和下标都是用remove,根据参数的数据类型来判断是值还是下标
list.clear();    //清空所有值

它的遍历方式是:

for(int i = 0; i < 对象名.size(); i++){
    System.out.print(对象名.get(i));
}

//foreach的方式:
for(int num:对象名){
    System.out.print(num);
}

2、LinkedList

         LinkedList和ArrayList有一点点的不一样,因为它是采用链式存储规则,前一个会有一个指针指向下一个值对的存储单位,像火车车厢一样,而ArrayList采用的存储方式类似于数组。它适用于集合数据频繁修改,但不适用于频繁的读、遍历操作的集合。

LinkedList的语法及常用方法有:

List list = new LinkedList();   //此行创建对象的代码也可以限定数据类型
LinkedList<String> list = new LinkedList<String>();    //此行创建对象的代码也可以不限定数据类型

//常用方法
list.add(Object);     //添加数据
list.add(int,Object);     //在指定位置添加数据
list.get(下标);     //取数据,下标从0开始到【长度-1】结束
list.size();       //得到长度
list.contains(Object);    //判断列表中是否存在指定元素
list.remove(int/Object);   //删除值,删除值和下标都是用remove,根据参数的数据类型来判断是值还是下标
list.clear();    //清空所有值

//除此之外,LinkedList还有属于自己的扩展方法
list.addFirst();     //在集合的最前面插入元素
list.addLast();     //在集合的最后面插入元素
list.getFrist();    //获取第一个元素
list.getLast();      //获取最后一个元素
list.removeFrist();    //删除第一个元素
list.removeLast();      //删除最后一个元素

它的遍历方式是:

for(int i = 0; i < 对象名.size(); i++){
    System.out.print(对象名.get(i));
}

//foreach的方式:
for(int num:对象名){
    System.out.print(num);
}

二、Set接口

        Set接口存储的是一组唯一(不允许重复)、无序的对象。它的操作、创建对象以及方法都是类似于List,这里就不在赘述它的语法及常用方法了。

1、HashSet

        HashSet存储方式类似于数组,它的创建对象及方法和ArrayList大同小异。

2、TreeSet

        TreeSet以树形结构图存储,它实现了SortedSet接口,所以它会自动排序,默认从小到大排列。

我们有时候为了查重,会通过Set给List去重。

三、Map接口

        Map接口存储的是一组成对的键-值对象,它的key不允许重复,但是value可以重复,key和value都不要求有序。

1、HashMap

        HashMap集合类是线程不安全的,但是它速度快。它的语法以及常用方法有:

Map map = new HashMap();   //此行创建对象的代码也可以限定数据类型
HashMap<String,String> map = new HashMap<String,String>();    //此行创建对象的代码也可以不限定数据类型

//常用方法
map.put(Object,Object);     //添加数据
map.get(key);     //取数据,下标从0开始到【长度-1】结束
map.size();       //得到长度
map.keySet();     //返回键的集合
map.keySet();     //返回值的集合
map.containsKey(Object);    //判断列表中是否存在指定键
map.containsValue(Object);    //判断列表中是否存在指定键
map.isEmpty();     //判断是否有值
map.clear();    //清空所有值

2、Hashtable

        Hashtable操作类似HashMap,方法以及创建对象都大同小异,但是它是线程安全的。在这里就不详细的介绍了。

3、ConcurrentMap

        ConcurrentMap是将HashMap和Hashtable结合在一起,它也是线程安全的,实现安全的方式比Hashtable更优,因为它针对线程安全部分做了优化。在这里不做主要讲述。

4、TreeMap

        它基本上也是和前面差不多,但是它不能以null为key,它会自动对key排序,基本语法和常用方法大同小异。

四、Iterator

        Iterator是一个迭代器,就是一个循环遍历的操作。操作步骤为:

1、先将List、Set、Map对象转换为Iterator对象;

2、通过Iterator对象的hasNext方法判断是否有下一个值;

3、通过Iterator对象的next方法取值。

它的语法为:

Iterator<数据类型> it = list(set\map).iterator();    //数据类型可写可不写
while(it.hasNext()){
    System.out,print(it.next());    //输出取到的值
}

例如,输出保存在Map集合里的狗狗信息:

//创建4个狗狗对象
Dog ououDog = new Dog("欧欧", "雪纳瑞");
Dog yayaDog = new Dog("亚亚", "拉布拉多");
Dog meimeiDog = new Dog("美美", "雪纳瑞");
Dog feifeiDog = new Dog("菲菲", "拉布拉多");

// 创建Map集合对象并把4个狗狗对象放入其中
Map dogMap = new HashMap();
dogMap.put(ououDog.getName(),ououDog);
dogMap.put(yayaDog.getName(),yayaDog);
dogMap.put(meimeiDog.getName(),meimeiDog);
dogMap.put(feifeiDog.getName(),feifeiDog);
		
//通过迭代器依次输出集合中所有狗狗的信息
System.out.println("使用Iterator遍历,所有狗狗的昵称和品种分别是:");
Set keys = dogMap.keySet();     //取出所有key的集合
Iterator it = keys.iterator();    //获取Iterator对象
while(it.hasNext()) {
	String key = (String)it.next();    //取出key
	Dog dog = (Dog)dogMap.get(key);    //根据key取出对应的值
	System.out.println(key + "\t" +dog.getStrain());
}

运行结果是:
在这里插入图片描述

好啦,今天就到这里啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值