集合框架(Collection单列集合)

本文深入解析Java集合框架,包括集合的由来、分类、区别及使用场景,详细介绍数组与集合的区别,重点讲解List和Set的实现方式、特点与适用情况,并提供集合遍历和操作的实例,最后探讨了Java集合的常用迭代器和特殊迭代方式,旨在帮助开发者高效利用Java集合进行数据处理。

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

1.集合的由来

2.集合的框架体系

3.集合分类及其子类

 

集合和数组的区别;

区别1 : 
数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
区别2:
数组长度是固定的,不能自动增长
集合的长度的是可变的,可以根据元素的增加而增长

总结:
1,如果元素个数是固定的推荐用数组
2,如果元素个数不是固定的推荐用集合

3.集合的框架体系(Collection)是单列集合的顶层接口,collections是其工具类,要学习collection接口,先要搞清楚它的分类和体系,用一张图清晰的表示一下,学起来会清晰许多.

这是单列集合图,还有双列集合是Map集合,所以要区分开.

1.Collection

Collection接口下有两个子类可以实现.一个是List一个是Set

List子类分为三个:ArrayList(数组实现)      LinkedList(链表实现)     Vector(数组实现)

Set子类分为两个 :TreeSet(二叉树实现)     HasSet(哈希算法)

2.List和Set

List和Set有这明显的区别但前提是他们都继承Collection接口,但List中存取数据有序有索引,元素可重复,而Set与List相对,无索引,值唯一,无序.

首先先来说List及其子类:

ArrayList(数组实现)   : 因为底层是数组实现,所以ArrayList的查询和更改数据较快,但增删比较慢. 线程不同步,不安全.

LinkedList(链表实现) : 因为底层是链表实现,所以LinkedList的查询比较慢,但增删较快.线程不同步,不安全.

Vector(数组实现)       : 底层与ArrayList一样,都是有数组实现,所以查询和更改数据较快但,增删比较慢,但线程同步,安全.

接下来是Set及其子类:

TreeSet(二叉树实现)  : 与ArrayList不同,两个子类都会保证元素的唯一性.但为什么能元素能唯一呢.treeset是通过匿名内部类,重写了compareto方法,保证元素的唯一性,如果这个数和之前一样那么返回0,如果前面没有重复,返回值是1,向Treeset集合添加元素,其实根据二叉树也能够得到这个结论,将第一个数作为根节点,下一个数是负数,就添加到根节点的左边的位置,如果是正数就添加到根节点的右边位置,如果一样大,系统默认为覆盖.

HasSet(哈希算法)       : hashset是因为它自身重写了hashcode() 和equals()方法,hashcode比较的是元素的地址值,而equals比较的是元素的属性值.所以两个比较就能保证元素的唯一性.

集合的遍历:

集合的遍历有三种: 普通for循环       迭代器(Iterator)          还有一种是list中特有的迭代方式(listiterator)

而在集合中,如果在遍历的同时要往集合中更改或者添加元素用普通迭代器会出现并发修改异常(java.util.ConcurrentModificationException).如图.

	public static void main(String[] args) {
		// TODO Auto-generated method stub
			ArrayList<String> ls = new ArrayList<>();
			ls.add("a");
			ls.add("b");
			ls.add("c");
			ls.add("d");
			Iterator<String> it = ls.iterator();
			while(it.hasNext()){
				ls.add("g");
				System.out.println(it.next());
					
			}
	}


 

 

所以这时就要用list特有的迭代器来遍历 如图:

	ArrayList<String> ls = new ArrayList<>();
		ls.add("a");
		ls.add("b");
		ls.add("c");
		ls.add("d");
		ListIterator<String> it = ls.listIterator();
		while (it.hasNext()) {
			String str = it.next();
			if (str.equals("a")) {
				it.add("g");
			}

		}
		System.out.println(ls);
	}


 

由此得知在遍历集合的时候也可以添加删除元素.

 

 

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

addFirst() :在第一个位置添加元素

addLast() : 在最后一个位置添加元素

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

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

 

 

 

 有很多不足,希望大家给点建议,我会加以改正.谢谢.

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值