集合(关于collection)


collection:collection是单列集合的顶层接口,collections是其工具类,要学习collection接口,那么先要搞清楚它的分类,用一张图清晰的表示一下,学起来比较方便.

首先声明collection是单列集合的顶层接口,这个要和map集合区分开,map集合是双列结合的顶层接口

(一)collection

collection下面分为两类:一个是list,另一个是set,list下面有三个分支vector,arraylist,linkedlist;set下面有两个分支:treeset和hashset

(二)list和set

list和set的异同:首先他们都是继承自collection的接口,list是存取有序的,并且值是可以重复的,而set集合是存取无序的,并且值是唯一的.

vector底层是数组结构的,但因为效率较低,后来被arraylist取代了,他们的属性都是一样的,只是vector效率低

arraylist底层也是数组结构,线程同步,但不安全,效率较高,主要用于查询,而增删就比较慢了,此刻不得不介绍linkedlist,这个集合底层是链表结构,因为它的增删效率非常的高,但是查询就比较慢了,这都是由于他们的底层构造所决定的,linkedlist也是线程同步的,不安全性质伴随存在,效率较高.

再来说set集合,hashset底层是哈希表,而treeset底层是二叉树

那么他们是怎么保证元素的唯一性的呢,hashset是因为它自身重写了hashcode() 和equals()方法,hashcode比较的是元素的地址值,而equals比较的是元素的属性值.

treeset是通过匿名内部类,重写了compareto方法,来保证元素的唯一性,如果这个数和之前一样那么返回0,如果前面没有重复,返回值是1,向set集合添加元素,其实根据二叉树也能够得到这个结论,将第一个数作为根节点,下一个数如果比第一个数小那么,就添加到根节点的左孩子的位置,如果大就添加到根节点的右孩子位置,如果一样大,系统默认为覆盖.

那么介绍完再来说一下集合和数组的区别:最大的区别就是集合的长度是可变的,而数组的长度是不可以改变的,是固定的.数组中既可以添加基本类型的元素,也可以添加引用数据类型的元素,而集合只能添加引用数据类型的元素.

通过长度可变不可变,我们还能延伸出迭代器的问题.

(三)迭代器

<span style="color:#000000;">public static void main(String[] args) {
		
		Collection c = new ArrayList();
		c.add(new Student("张三", 23)); //Object obj = new Student("张三",23);
		c.add(new Student("李四", 24));
		c.add(new Student("王五", 25));
		c.add(new Student("王佳", 26));
		
		//获取迭代器
		Iterator it = c.iterator();
		while(it.hasNext()) {
			//System.out.println(it.next());
			Student s = (Student)it.next();	//向下转型
			System.out.println(s.getName() + "..." + s.getAge());
		}
	
	}</span>


以上代码就是通过迭代器遍历这个集合,吗么需要注意的就是向下转型问题,记住一定要向下转型,不然编译就会错误,因为要用到子类的特性了.

虽然在代码当中没有展示Student类,可是需要注意的是Student类中一定要重写tostring方法,否则输出的那些那些乱码相信大家都遇到过吧.

在这里需要特别说明一个问题:在迭代器进行迭代的时候能不能同时修改集合中的元素呢????

答案肯定是不能的.这个迭代器是根据集合创建出来的,如果你修改了集合中的元素,迭代器同样会发生变化,这时候就会出现一个异常,叫做并发修改异常,一定要记得这个异常

并发修改异常:ConcurrentModificationException,在java中,这种异常是运行通过不了的.

那么应该如何解决这个问题呢??

a.如果我们想修改集合中的元素,可以通过普通for来遍历这个集合,对集合中的元素进行修改.

b.使用list集合中的特有的迭代器ListIterator,记住这个迭代器是list集合特有的迭代器,对元素进行修改.

public static void main(String[] args) {
		List list = new ArrayList();
		list.add("a");	//Object obj = new String();
		list.add("b");
		list.add("world");
		list.add("c");
		list.add("d");
		list.add("e");
		
		ListIterator lit = list.listIterator();	//获取迭代器
		while(lit.hasNext()) {
			System.out.println(lit.next()); 	//获取元素并将指针向后移动
		}
		
		System.out.println("-----------------");
		
		while(lit.hasPrevious()) {
			System.out.println(lit.previous()); //获取元素并将指针向前移动
		}
	}

以上是用代码举例说明ListIterator迭代器,如果直接用list集合添加"javaee",那么迭代器也会发生变化(list.add("javaee")),而我们用list集合特有的迭代器进行添加(lit.add("javaee")),是不会有问题的.

至于linkedlist,要说下当中的特有的方法

addFirst();

addLast();

RemoveFirst();如果集合当中没有元素,那么会出现空元素异常NoSuchElementException

RemoveLast();如果集合当中没有元素,那么也会出现空元素异常NoSuchElementException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值