J2EE快速入门之集合框架【01】

目录

一、集合体系结构讲解

1、Collection顶级接口讲解

(1)概念

(2)常用方法

(3)迭代器

2、讲解List集合与其实现类

(1)可重复

(2)有序

(3)List优化

3、List实现类的不同特征

(1)对象数组结构

(2)链表结构

4、泛型

(1)JDK1.5之后以类型作为参数的类就叫泛型(2)作用:提高程序健壮性,简化代码(3)泛型的默认值是Object

5、装箱、拆箱

   (1)值类型->引用类型 装箱   (2)引用类型->值类型 拆箱   (3)jdk1.5之后引入了自动装箱及自动拆箱功能


一、集合体系结构讲解

CollectionList (有序集合,允许相同元素和null)

           │  ├LinkedList (非同步,允许相同元素和null,遍历效率低插入和删除效率高)

           │  ├ArrayList (非同步,允许相同元素和null,实现了动态大小的数组,遍历效率高,用的多)

           │  ├Vector(同步,允许相同元素和null,效率低)

           │  ├ Set (无序集合,不允许相同元素,最多有一个null元素) | └HashSet(无序集合,不允许相同元素,最多有一个null元素

1、Collection顶级接口讲解

(1)概念

          ①Collection是最基本的集合接口(也可以称为顶级接口)

          ②在Collection的实例中,有些实例允许相同的元素,有些则不允许,还有一些能内置实现排序功能,所以 根据存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系

         ③同时,在Java中不提供直接继承自Collection的类,Java所提供的类都是继承自Collection的“子接口”: List和Set ,但不是Map的父接口

(2)常用方法

(3)迭代器

        ①概念

         因为Collection继承了Iterable,所以它以下的实现类也都会具备 iterator() 这个方法 ,我们可以通过这个方法来获得一个 Iterator ,也就是一个迭代器 关于迭代器中的方法,我们可以通过查看 Iterator 的源码

        ②方法作用

       ③使用步骤 

     ④使用ArrayList来演示迭代器的使用

ArrayList<Object> cs=new ArrayList<Object>();//里氏替换原则
//向集合中添加数据
cs.add("1");
cs.add("2");
cs.add("3");
cs.add("4");
cs.add("5");
cs.add("6");
System.out.println("集合的原有长度:"+cs.size());
Iterator<Object> i = cs.iterator();//获得该集合的迭代器
while(i.hasNext()) {//判断迭代器中是否存在下一个元素
System.out.println(i.next());//指针向下移动一位,并取出对应元素(对应上图讲解)
i.remove();//移除指针对应的元素
}
System.out.println("集合的长度:"+cs.size());

2、讲解List集合与其实现类

        Collection的子接口,这个接口所具备的特征: 可重复 , 有序

(1)可重复

             在集合内部,一个元素可以出现多次,也就是在集合中可以占有多个位置


Person p=new Person();
List<Person> ls=new ArrayList<Person>();
ls.add(p);
ls.add(p);
ls.add(p);
//说出集合的长度 size=3
//得出结论: p这个元素在集合中重复了三次,占了三个位置,这就是可重

(2)有序

       List中的有序指的不是内部的元素会以某种格式排序,而是指其中的每个元素在进入集合时都是有添加顺序的 先添加的在前面,后添加的在后面,这些位置是有序的 也就是 0,1,2,3,4.... (我们称之为下标)

List<String> ls=new ArrayList<String>();
ls.add("jack");
ls.add("mary");
ls.add("eason");
//jack的下标是1
//mary的下标是2
//eason的下标是3
//add这个方法是在集合的最后一位添加元素,下标也就会随着变大
//在add的时候还可以指定当前添加的元素的位置 -> ls.add(2,"asong");
///将 asong 放入集合的第2位
//未添加 asong 时: [jack, mary, eason]
//添加了 asong 后: [jack, mary, asong, eason]
//需要注意的是,指定的位置必须小于当前集合的最大下标
//同时,因为List是有序的,我们除了可以按照顺序(下标)插入之外,也可以按照顺序(下标)来读取与删除
//读取: ls.get(0),根据下标来读取的方式我们一般称为随机读取
//删除:
ls.remove(0) //根据下标移除第0位
ls.remove("jack") //移除集合中的 jack ,集合中是使用equals来判断的

(3)List优化

        当集合实例化的时候,默认的大小为10,我们也可以在实例化的时候调用对应的构造来创建响应的大小

 

        因为无参实例集合的初始长度为10,当我们添加的元素超过10位的时候,集合的大小就不够了,需要扩 容 每次添加的时候,都调用grow方法判断是否需要扩容

 

      ArrayList的扩容因子是1.5 : 原容量的0.5倍

3、List实现类的不同特征

        根据数据结构的不同,List底下的实现类可以分为两种: 对象数组结构 , 链表结构

(1)对象数组结构

       ① 特点:基于对象数组,拥有下标,每次扩容的时候其实都是新建了一个更大的数组,然后将原有内容复 制过去

       ② ArrayList 增删慢,查询快,有连续下标,线程不同步(不安全),扩容因子为1.5

       ③ Vector 增删改查都慢,有连续下标,线程同步(安全),扩容因子为2

查看两个类中,相同方法的区别(突出线程的同步)

 

          基于对象数组的集合最大的好处就是读取非常快,因为是随机读取,但是修改的速度比较慢,如果在项 目中遇到了需要非常频繁的对集合中的元素进行修改的操作,可以使用链表结构的集合

(2)链表结构

          ① Linkedlist 链表结构,增删快,查询慢,没有连续下标

         ② LinkList的使用

LinkedList<String> ls=new LinkedList<String>();
ls.add("jack");
ls.add("jack1");
ls.add("jack2");
ls.add("jack3");
System.out.println(ls.get(1));//jack1
//虽然我们是通过下标来取值,但是在内部,还是得从链表开头一直查,查询到链表的对应位

     ③LinkList特有方法

addFirst();// 添加在第一个
addLast(); //添加在最后一个
getFirst();// 得到第一个
getLast(); //得到最后一个
removeFirst();// 移除第一个
removeLast(); //移除最后一个

4、泛型

(1)JDK1.5之后以类型作为参数的类就叫泛型
(2)作用:提高程序健壮性,简化代码
(3)泛型的默认值是Object

//以类型作为参数的类就称为泛型
		List<Integer> list = new ArrayList<Integer>();
		list.add(1);
		list.add(3);
		list.add(5);
		list.add(7);
		list.add(9);
		//获取迭代器
		ListIterator<Integer> listIterator = list.listIterator();
		while(listIterator.hasNext()) {
			//获取数据类型
			Integer num = listIterator.next();
			if(num%2==0) {
				System.out.println(num);
			}
		}

5、装箱、拆箱

   (1)值类型->引用类型 装箱
   (2)引用类型->值类型 拆箱
   (3)jdk1.5之后引入了自动装箱及自动拆箱功能

		//装箱:值类型变为引用类型
		int a =1;
		Integer num = new Integer(a);
		
		//拆箱:引用类型变为值类型
		int b = num.intValue();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ning_ning_03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值